jQuery:如何识别为哪个XHR处理程序ajaxComplete()被触发

时间:2014-03-11 00:06:21

标签: javascript jquery xmlhttprequest

我的JavaScript中有多个$.get()处理程序。我希望能够在处理程序成功完成请求后运行特定代码。从jQuery的文档中,看起来我正在寻找以下内容:

$( document ).ajaxComplete(function() {
  $( ".log" ).text( "Triggered ajaxComplete handler." );
});

我遇到的问题是,每个$.get()处理程序都会触发此问题。我怎样才能确定哪一个正在关闭,以便我可以采取更新用户界面所需的正确步骤?

2 个答案:

答案 0 :(得分:0)

就个人而言,我只是在我自己的函数中包装所有jQuery AJAX方法。这样我可以做各种跟踪和缓存行为,而不依赖于钩子。例如:

function AJAXLoad(method, data, callback) {
    var request = method + (new Date()).toString();
    console.log("Sending request " + request);
    $.ajax(method, { data: data, success: function(msg) {
        console.log("Request " + request + " completed.");
        callback(msg);
    }});
}

答案 1 :(得分:0)

您将获得xhr对象和设置对象作为回调的参数,您可以使用它们来识别ajax方法

$(document).ajaxComplete(function (event, jqxhr, settings) {
    console.log(jqxhr)
    $(".log").text("Triggered ajaxComplete handler.");
});

但是如果你想为特定的ajax请求注册一个回调,并且你可以访问那个ajax请求的promise对象,那么你可以使用.always()回调,比如

var promise = $.post('/echo/json/', {});//or $.ajax() etc
promise.always(function(){
    //do something
})