完成jQuery AJAX请求的参数

时间:2011-01-14 14:31:22

标签: javascript jquery ajax

如何在完成后找出传递给(异步)jQuery AJAX请求的参数?

基本上,我正在发送一堆AJAX请求,其中不同的id作为参数传递,并在每个请求完成时向用户显示结果。现在,如果请求成功,我可以在请求的结果中传回id。但是,如果请求失败,我不知道哪个请求失败,即该请求是什么ID。

示例(javascript / jQuery):

for(var i=0; i < 10; i++ ) {

    $.ajax({
        type: "GET",
        url: "get-results.php", 
        data: { 'id': i },
        success: function(data, textStatus, xmlReq) {

            data = $.parseJSON(data);
            $("#result" + data.id).html(data.result);

        },
        error: function(xmlReq, textStatus, errorThrown) {

            var id= ???;
            $("#result" + id).html('error bla bla');

        }
   });
}

4 个答案:

答案 0 :(得分:3)

$.ajaxError为您提供通过AJAX调用发送的数据。

.ajaxError(handler(event, XMLHttpRequest, ajaxOptions, thrownError))

ajaxOptions对象包含可以通过$.ajax

设置的所有选项

因此,不要使用error:中的$.ajax选项,而是使用$.ajaxError

$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){
  if(ajaxOptions.url.indexOf('get-results.php') != -1){
    var data = ajaxOptions.data; // this is a string: 'id=1&param2=4'
                                 // to get the ID, you need to parse this
  }
});

答案 1 :(得分:2)

使用Javascript支持闭包的事实,只需编写变量名称(但要小心将其复制到for块范围内,以便它不会更改):

for(var i=0; i < 10; i++ ) {
    var INDEX = i;
    $.ajax({
        type: "GET",
        url: "get-results.php", 
        data: { 'id': i },
        success: function(data, textStatus, xmlReq) {

            data = $.parseJSON(data);
            $("#result" + data.id).html(data.result);

        },
        error: function(xmlReq, textStatus, errorThrown) {

            var id = INDEX;
            $("#result" + id).html('error bla bla');

        }
   });
}

我相信这就是你想要的。

答案 2 :(得分:2)

您需要为i函数捕获error的当前值。你用一个封闭捕获。所以:

error: function(id) {
    return function(xmlReq, textStatus, errorThrown) {

        $("#result" + id).html('error bla bla');

    };
}(i)

error是立即调用传递当前值i的匿名函数的结果。

答案 3 :(得分:1)

您需要将回复传回来。