我有大约100个同时发出的ajax请求,我认为浏览器只允许同时发出一些请求,所以剩下的会被添加到队列中。
然而问题是jquery / javascript似乎使用从通过jquery创建请求时的超时值,而不是从浏览器实际执行请求的时间。所以我得到了一堆超时。是否有可能从请求实际进入URI位置开始计算超时,而不是jquery添加它的时间?
答案 0 :(得分:1)
您可以将timeout
设置用于ajax请求。您可以在http://api.jquery.com/jQuery.ajax/
然而,超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。因此,如果您希望遵循此方法,则应为超时设置一些非常大的值。
更好的方法是拥有一个本地代理,它可以接收所有AJAX调用,然后在5-10组中触发它们,然后当所有这些成功完成后,它会触发接下来的5-10个请求。
答案 1 :(得分:1)
这是一种队列系统。首先调用ajax
函数N
次,然后在每次成功后再次调用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();
}
});
});