どのように非同期のajax呼び出しを許可するかを制御できますか? この制限を3に設定すると、3番目の要求が完了するまで4番目の要求がキューに入れられます。コントロールjQuery非同期Ajaxは番号を呼び出しますか?
注:AJAX呼び出しを実行するコードの私のページに動的に挿入されて、私は機能が要求を行いますれている制御することはできません。..
どのように非同期のajax呼び出しを許可するかを制御できますか? この制限を3に設定すると、3番目の要求が完了するまで4番目の要求がキューに入れられます。コントロールjQuery非同期Ajaxは番号を呼び出しますか?
注: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を一度に実行することができるようになります。
別の関数を使いたくない場合は、main 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();
}
})();
実際には、このアプリはAjaxリクエスト(他のプラグイン、他の開発者のコード、以前に書いたいくつかのコード)でいっぱいですので、私はこれを使用できません。 – skafandri
@skafandriが更新されました。 – loganfsmyth
素敵ですが、かなり醜い:)私はちょうど正しい方法で$ .ajaxをオーバーライドします。 – skafandri
あなたはプラグインを使用できないと言ったので、これは私が考えることのできるものですが、効率を保証するものではありません。
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コントローラを削除することができます。
PS:これは実行可能なスレッドの数を設定できるソフトウェアに非常に触れられています – skafandri
標準の '$ .ajax'関数では、以前のものが返されるまで要求をキューに入れることができるはずですタイムアウトする。 – loganfsmyth
あなたは正しいです!私はこれに入る前に、より速い解決策があるかどうか疑問に思っていました! – skafandri