检测ajaxSend()和ajaxComplete()之间的匹配

时间:2016-12-13 17:55:33

标签: jquery ajax

我需要捕获所有ajax请求。我使用jQuery like here

$(document).ajaxSend(function (event, req, settings) {
    console.log('Request Sent');
});
$(document).ajaxComplete(function (event, req, settings) {
    console.log('Request Completed');
});

我可以有一些重复的请求(使用相同的URL)。也许有相同的数据。
Simple example
在这里,我两次调用loadBBC()。

问题:如何为第一个loadBBC和第二个loadBBC识别(匹配)ajaxSend / ajaxComplete?

我只想将所有 request_1 / response_1 request_2 / response_2 一起保存。不是 request_1,request_2,response_2,response_1

我无法将settings.url或settings.data用作唯一值,因为它们可以重复使用。

由于

3 个答案:

答案 0 :(得分:0)

我认为jQuery AJAX不支持第三方JS库。
所以我使用原生XMLHttpRequest并覆盖它。
我使用了these种方法并对其进行了修改(以便将来自发送()请求和来自' readystatechange'事件响应保存在一起)。

例如,您可以使用https://github.com/slorber/ajax-interceptor。并添加您自己的功能。

答案 1 :(得分:0)

如果我理解正确,您希望通过唯一值关联您的请求和回复。

您可以在jquery.ajax上使用上下文。这意味着你必须“放弃”加载,但由于它真的是ajax的包装器,除了一点点打字之外你不会丢失任何东西。

以下是使用您提供的类似代码的示例。

String htmlText = WikiModel.toHtml("This is a simple [[Hello World]] wiki tag");

});

答案 2 :(得分:0)

我的建议是,向全局ajaxSend中的每个请求添加一个特定的侦听器,而不是两个未连接的侦听器。一个样本胜过千字:

$(document).ajaxSend(function (e, xhr, settings) {
    xhr.always(function () {
        //do something
    });
});

always是等效于ajaxComplete的延迟方法。 Check other supported methods