簡體   English   中英

防止Ajax請求超時(jquery)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM