私のアプリケーションは、4 つのスレッドしか持たないサーバー (Baracudda サーバーなど) に対して同時 AJAX 非同期呼び出しを行います。同時 AJAX 非同期呼び出しを順次非同期呼び出しに変換する必要があります。jQuery内にそれを行うメカニズムはありますか? 提案してください。
コード:
function initiateAJAXRequest() {
var promise = $.ajax({
type: queue[0].options.type,
url: queue[0].options.url,
timeout: queue[0].options.timeout || 3000,
cache: (!queue[0].options.cache) ? queue[0].options.cache : true,
dataType: queue[0].options.dataType,
data: queue[0].options.data
}).promise();
promise.then(function(result) {
console.log(queue[0]);
// I get an error in the line below: "xhr is undefined".
queue[0].dfd.resolve(result);
queue.splice(0, 1);
if(queue.length > 0) {
queue[0].isActiveRequest = true;
initiateAJAXRequest();
}
});
promise.fail(function(xhr, statusText, message) {
queue[0].dfd.reject(arguments);
queue.splice(0, 1);
if(queue.length > 0) {
queue[0].isActiveRequest = true;
initiateAJAXRequest();
}
});
}
function callAJAXAsync(options) {
// Create deferred object. This will manage the promise chain who calls this method.
var deferred = new $.Deferred();
window.queue.push({dfd: deferred, options: options});
window.queue = queue;
if(!window.queue[0].isActiveRequest) {
window.queue[0].isActiveRequest = true;
initiateAJAXRequest();
}
return deferred.promise();
};
これは、アプリケーションのフレームワーク用に作成したコードです。1 つのページで callAJAXAsync() メソッドを複数回呼び出すことができます。問題は、initiateAJAXRequest() 内のコメント行でエラーが発生することです。
EDIT 私を襲ったことの1つは、callAJAXAsync()メソッド内で新しい遅延オブジェクトを作成し、initiateAJAXRequest()メソッド内で解決/拒否していることです。それは有効ですか?
解決策 このコードは正常に動作します。エラーは別の理由によるものでした。念のため作成したフィドルは次のとおりです... http://jsfiddle.net/LnaPt/