簡體   English   中英

完成jQuery AJAX請求的參數

[英]Get params of jQuery AJAX request on complete

如何在完成后找出傳遞給(異步)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');

        }
   });
}

$.ajaxError為您提供通過AJAX調用發送的數據。

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

ajaxOptions對象包含可以通過$.ajax設置的所有選項

因此,不要使用$.ajaxerror:選項,而是使用$.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
  }
});

使用Javascript支持閉包的事實,只需編寫變量名稱(但要小心將其復制到for block作用域內,以便它不會更改):

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');

        }
   });
}

我相信這就是你想要的。

您需要捕獲error函數的i的當前值。 你用一個封閉捕獲。 所以:

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

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

    };
}(i)

這是error是立即調用傳遞i的當前值的匿名函數的結果。

您需要將其與您的回復一起傳回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM