[英]Prevent ajax requests from timing out (jquery)
我有大約100個同時發出的ajax請求,我認為瀏覽器只允許同時允許幾個請求,因此其余的將添加到隊列中。
但是,問題是jquery / javascript似乎從通過jquery創建請求開始就使用了超時值,而不是從瀏覽器實際執行請求開始就使用了超時值。 這樣我就會超時。 是否有可能使超時從請求實際到達URI的時間開始計數,而不是從jquery添加的時間開始計數?
您可以將timeout
設置用於ajax請求。 您可以在以下位置找到相同的jQuery文檔: http : //api.jquery.com/jQuery.ajax/
但是,超時時間始於進行$ .ajax調用的時間點; 如果其他幾個請求正在進行中,並且瀏覽器沒有可用的連接,則可能有一個請求超時,然后才能發送該請求。 因此,如果您希望采用這種方法,則應為超時設置一些非常大的值。
更好的方法是擁有一個本地代理,該代理可以處理所有AJAX調用,並以5-10個為一組觸發它們,然后,當所有這些調用成功完成后,就會觸發下一個5-10個請求。
這是一種隊列系統。 從N
次調用ajax
函數開始,然后每次成功之后,再次調用ajax
函數。 在成功回調中也有一個檢查,以查看是否所有資產都已加載...
$(document).ready(function(e) {
$("form[ajax=true]").submit(function(e) {
e.preventDefault();
var form_url = $(this).attr("action");
var form_method = $(this).attr("method").toUpperCase();
$("#loadingimg").show();
var started = 1, done = 0;
function ajax(){
$.ajax({
url: form_url,
type: form_method,
data: "html=started "+(started++),
cache: false,
success: function(returnhtml){
done++;
$("#result").html(returnhtml);
$("#loadingimg").hide();
if(started <= 100){
ajax();
} else if (done == 100) {
alert("all done!");
}
}
});
}
// how many concurrent calls?
for(i=0;i<10;i++){
ajax();
}
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.