防止ajax请求超时(jquery)

时间:2014-04-25 07:10:57

标签: javascript jquery ajax

我有大约100个同时发出的ajax请求,我认为浏览器只允许同时发出一些请求,所以剩下的会被添加到队列中。

然而问题是jquery / javascript似乎使用从通过jquery创建请求时的超时值,而不是从浏览器实际执行请求的时间。所以我得到了一堆超时。是否有可能从请求实际进入URI位置开始计算超时,而不是jquery添加它的时间?

2 个答案:

答案 0 :(得分:1)

您可以将timeout设置用于ajax请求。您可以在http://api.jquery.com/jQuery.ajax/

找到相同的jQuery文档

然而,超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。因此,如果您希望遵循此方法,则应为超时设置一些非常大的值。

更好的方法是拥有一个本地代理,它可以接收所有AJAX调用,然后在5-10组中触发它们,然后当所有这些成功完成后,它会触发接下来的5-10个请求。

答案 1 :(得分:1)

这是一种队列系统。首先调用ajax函数N次,然后在每次成功后再次调用ajax函数。还会检查成功回调以查看是否已加载所有资产......

demo fiddle

$(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();
        }
    });

});