許可される非同期 ajax 呼び出しの数を制御するにはどうすればよいですか? たとえば、この制限を 3 に設定すると、3 つのうちの 1 つが完了するまで 4 番目の要求がキューに入れられます。
注: ajax 呼び出しを実行するコードがページに動的に挿入されます。どの関数が要求を行うかを制御することはできません..
許可される非同期 ajax 呼び出しの数を制御するにはどうすればよいですか? たとえば、この制限を 3 に設定すると、3 つのうちの 1 つが完了するまで 4 番目の要求がキューに入れられます。
注: ajax 呼び出しを実行するコードがページに動的に挿入されます。どの関数が要求を行うかを制御することはできません..
たぶん、このようなことを試してみてください。テストに便利なサイトがありません。申し訳ありません。
$.queueAjax = (function() {
var queue = [];
var maxConnections = 4;
var running = 0;
function flush() {
while (running < maxConnections && queue.length) {
running += 1;
var args = queue.shift();
var xhr = $.ajax.apply($, args);
xhr.done(function() {
running -= 1;
flush();
});
}
}
return function() {
var args = Array.prototype.slice(arguments);
queue.push(args);
flush();
}
})();
あなたと同じように呼び出すことができます$.ajax
が、リクエストをバッファリングし、一度に実行できるのは 4 つだけです。
別の関数を使用したくない場合は、メインの jQuery 関数を置き換えることもできますが、それはかなり見苦しいものです。このようなもの:
$.ajax = (function() {
var ajax = $.ajax;
var queue = [];
var maxConnections = 4;
var running = 0;
function flush() {
while (running < maxConnections && queue.length) {
running += 1;
var args = queue.shift();
var xhr = ajax.apply($, args);
xhr.done(function() {
running -= 1;
flush();
});
}
}
return function() {
var args = Array.prototype.slice(arguments);
queue.push(args);
flush();
}
})();
あなたはプラグインを使用できないと言ったので、これは私が考えることができるものですが、効率を保証するものではありません.
var ajax_calls = new Array(); //グローバル変数
if( ajax_calls.length < 3 ){
ajax_calls.push(
jQuery.ajax({
url: "target.php",
type: "POST", //or GET
data: {varname: "value"}
})
);
}
その後、成功時に対応する ajax コントローラーを削除できます。