如何控制允許多少個異步ajax調用? 比方說,如果我將此限制設置爲3,則第4個請求將排隊,直到3箇中的一個完成。控制jQuery異步ajax調用號碼?
注意:執行Ajax調用的代碼動態插入我的頁面,我沒有控制哪個功能會主動要求..
如何控制允許多少個異步ajax調用? 比方說,如果我將此限制設置爲3,則第4個請求將排隊,直到3箇中的一個完成。控制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在一次運行。
如果你不想使用一個單獨的函數,你也可以替換主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 2012-04-27 16:50:23
@skafandri更新。 – loganfsmyth 2012-04-27 16:52:50
不錯,但相當醜陋:)我只是以正確的方式覆蓋$ .ajax – skafandri 2012-04-27 17:03:23
既然你說過你不能使用任何插件,這是我能想到的,但不能保證效率。
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 2012-04-27 16:35:22
你應該能夠在標準的'.ajax'函數上創建一個包裝器,或超時。 – loganfsmyth 2012-04-27 16:37:59
你是對的!我想知道在我進入此之前是否有更快的解決方案! – skafandri 2012-04-27 16:40:40