【问题标题】:Success callback not running成功回调未运行
【发布时间】:2013-09-14 18:32:38
【问题描述】:

谁能告诉我为什么我在这个 jQuery 中的成功回调没有被调用?

$(document).ready(function () {

    var queueid = $('#hidqueueid').val();
    var queuemax = $('#hidqueuemax').val();
    var queuenext = $('#hidqueuenext').val();
    var sid = $('#hidsid').val();
    var acc = $('#hidacc').val();
    var key = getCookie('account_key');

    var processNext = function() {
        var url = "functions.aspx?sid=" + sid + "&acc=" + acc + "&func=processqueue&id=" + queueid + "&next=" + queuenext + '&key=' + key;
        showProgress();
        $.post(url, function (data) {
            alert(data); // <== never happens :(
            var result = $(data).attr('result');
            if (result == 'ok') {
                queuenext = $(data).attr('next');
                if (queuenext > 0) {
                    $('#hidqueuenext').val(queuenext);
                    processNext();
                } else {
                    var newurl = 'Data.aspx?sid=' + sid + '&acc=' + acc;
                    location.href = newurl;
                }
            }
        }, function() {
            // error
            alert('Oops!');
        });
    };

    var showProgress = function() {
        var output = "<div>" + queuenext + " of " + queuemax + "</div>";
        $('#divprogress').html(output);
    };

    processNext();
});

返回结果的 C# 工作正常,如下所示:

string xml = new Queue(sid, acc, queueId).ProcessItem(queueNext, key);
Response.ClearContent();
Response.ContentType = "text/xml";
Response.Write(xml);
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();

当我调试 C# 时,XML 看起来很好

感谢您的帮助!欢迎所有建议。

【问题讨论】:

  • 什么 HTTP 状态通过网络传输?
  • 我不知道。我怎样才能知道?我会尝试谷歌搜索它
  • 使用调试工具,如Fioddler
  • $.post 只接受成功回调,不接受错误回调(与返回的promise接口不同)检查DOC。我认为您的第一个回调被忽略(应该是数据对象),第二个被用作成功回调
  • 直接编写内容可能不是最佳选择。考虑使用JSON 作为操作方法的结果。

标签: c# jquery xml


【解决方案1】:

post有三个初始参数,第一个是地址,第二个是data,在你的情况下应该为null,第三个是成功回调。

如果需要失败回调,请使用fail 方法:

$.post('', null, null).fail(function(data) {} );

另外,如果您觉得使用该 XMLRequest 对象更舒服,您可能想要使用complete 方法:

$.post('/do/action', { Id: 120 }, null).fail(function(data) {
    // code
}).complete(function(data) {
    // code for complete, which is the same as success callback. 
});

还有.always()方法总是被回调,呵呵。还有others

【讨论】:

  • 代码除了失败回调外一切正常。我删除了它,现在它可以工作了。感谢所有指出这一点的人!
  • @bukko 顺便说一下,您可能需要提高“标记为回答率”。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多