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

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


而且我可以有一些重复的请求(使用相同的网址)。也许使用相同的数据。
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用作唯一值,因为它们可以重复。

谢谢

最佳答案

如果我对您的理解正确,那么您正在寻求通过唯一值关联您的请求和响应。

您可以在jquery.ajax上使用上下文。这意味着您将不得不“放弃”加载,但是由于它实际上是围绕ajax的包装,因此您只需进行一点输入就不会丢失任何内容。

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

$(function () {

// Ensure if our request context doesn't have an ID we at least get something back.
function getContextRequestID(settings, defaultIfNotSet)
{
    if (typeof settings.context.requestID !== "undefined")
    {
        return settings.context.requestID;
    }
    return defaultIfNotSet;
}

function writeToJsResult(method, settings)
{
    var DefaultRequestID = -1;

    var requestID = getContextRequestID(settings, DefaultRequestID);

    $(".js-result").append('<p>' + method + ': Ajax request for page -->  ' + settings.url + ' with ID of: ' + settings.context.requestID + '</p>');
}

$(document).ajaxSend(function (event, jqxhr, settings) {
    writeToJsResult("Starting", settings);
});

$(document).ajaxError(function (event, req, settings) {
    writeToJsResult("Error", settings);
});

$(document).ajaxComplete(function (event, req, settings) {
    writeToJsResult("Complete", settings);
});

/* triggering all Ajax requests */
$('.js-btn-json').on('click', function () {
    loadBBC();
    loadBBC();
});

function loadBBC()
{
    loadSite("http://www.bbc.com");
}

function loadCNN()
{
    loadSite("http://www.cnn.com");
}

function loadSite(url)
{
    // Not sure how you want to correlate them. For now using random.
    // Perhaps a global running counter
    // Perhaps a GUID/UUID
    // http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
    var requestID = getRandomInt(0, 100);

    $.ajax({
        url: url,
        context: {
            requestID: requestID
        }
    });
}

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}


});

09-28 02:52