0

JQuery モバイルで For ループと配列を使用して ajax リクエストを作成しようとしています。

私は。。をしようとしています:

  1. すべてのリクエストを送信します。
  2. すべての応答を保存します。
  3. すべての Ajax が完了したら、別のアクションを実行します。

これまでのところ、実際にはうまくいかないものがあります(それが私がここにいる理由です)。

var req1 = [];
var req2 = [];
var size = //some number passed to here//;

//Create size number of unique ajax json requests
for (i = 0; i < size; i++) {
        requestA[i] = // GET request for json datatype //;
        requestB[i] = $.ajax(requestA[i]);   
};

for (j = 0; j < size; j++) {
    requestB[j].done (function (response) {   
        if (response[j].results.length > 0) (      
            requestB[j] = response[j].results;            
        }
});   

$(document).ajaxStop (function() {
        // Do this after all ajax is done //   
});
4

2 に答える 2

0

コールバック中に配列をロックしてみてください。

このようなもの

var isLoked = false;

// ...
if (response[j].results.length > 0 && !isLocked) (
        isLocked = true;    
        requestB[j] = response[j].results;            
        isLocked = false;
}

PSなぜ同じループでリクエストを作成してコールバックを割り当てたくないのですか?

于 2013-08-10T17:15:50.587 に答える
0

$.whenコールバックを装備するために使用するこの方法を使用している理由がわかりません...そしてそれにすべての応答を渡すことができます。

var req = [];
var size = 5;

for (i = 0; i < size; i++) {
        // not sure what the signicance of A and B arrays are here...
        requestA[i] = // GET request for json datatype //;
        requestB[i] = $.ajax(requestA[i]);

       // but we want to push them all onto req
       req.push(requestA[i]);
       req.push(requestB[i]);  
};

// so we need a callback for when they are all finished:
jQuery.when.apply(null, req).then(successFunction, failFunction);
于 2013-08-10T17:18:15.317 に答える