Javascript 对多个AJAX请求排队,等待响应,而不是冻结浏览器?
我正在编写一个脚本,我需要循环一系列AJAX请求:Javascript 对多个AJAX请求排队,等待响应,而不是冻结浏览器?,javascript,jquery,ajax,queue,Javascript,Jquery,Ajax,Queue,我正在编写一个脚本,我需要循环一系列AJAX请求: $('#fetchPosts').click(function(){ for(var i=0; i < link_array.length; i++) { settings = { // some object not relevant } var status = main_ajaxCall(settings, i); // ajax call
$('#fetchPosts').click(function(){
for(var i=0; i < link_array.length; i++) {
settings = {
// some object not relevant
}
var status = main_ajaxCall(settings, i); // ajax call
}
});
function main_ajaxCall(settings, i) {
$.ajax({
type: "POST",
url: "../model/insert.php",
data:{obj_settings: settings},
dataType: "json",
cache: false,
success: function (data) {
// some handeling here
return 0;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
return 1;
},
};
$('#fetchPosts')。单击(函数(){
对于(var i=0;i
为什么AJAX请求会立即触发?它似乎不会等待model/insert.php的响应,有没有办法强迫它在触发下一个AJAX请求之前等待响应
编辑1:
我好像不清楚,对不起,我不想让它等,我想把电话排好
我无法在一个请求中进行调用,在我当前的情况下这是不可能的。如果要等待响应,请将async设置为false(默认值:true) 如果不希望阻塞,可以使用设置成功处理程序函数,如果要等待所有连接完成,则必须跟踪活动的AJAX连接- 最好的解决方案是将AJAX请求的数量减少到一个。如果必须循环AJAX请求,那么可以在某个地方简化逻辑(也许可以将其放在服务器中?) 编辑1:(响应OP编辑) 如果要对AJAX请求排队,在这里之前已经回答了这个问题:
成功:
或错误:
函数
这里代码的作用是基于link_数组长度创建多个并发请求
您可以在AJAX调用中指定async:false
,但这会在所有AJAX调用进行时冻结浏览器
您应该重写代码以执行所有处理,这是success:
函数的一部分。我建议您重写代码,将所有请求组合成一个,并进行一次AJAX调用,而不是多次调用,并让服务器将所有响应作为一个块返回。我不能确切地建议您如何执行此操作-这是一种实现依附性
编辑:
根据您的说明,如果您希望按顺序调用它们,则需要success函数来调用下一个。然后您将有一系列成功调用next,其成功调用next,其成功调用next..等等,直到最后一个进行最终处理的函数。一种方法是将呼叫号码传递给suaccess函数。它立即启动,不需要等待,因为这是AJAX最擅长的功能(第一个A代表异步) 对服务器的请求可能需要很长时间才能响应,并且在大多数情况下,不希望用户的浏览器冻结或阻止他们执行任何其他操作。如果您这样做,您可能只需要使用普通请求 这就是您为它提供success error函数的原因,以便它可以在服务器响应时调用这些函数 如果您希望在调用insert.php时浏览器中不会发生任何事情,您可以在加载图像的所有内容上放置一个覆盖层(如深色div),并在成功后将其删除
可能将$('#fetchPosts')元素替换为“加载…”文本,然后在完成后将其反转。隐藏fetchPosts元素的可见性并添加不同的“加载…”元素是一种很好的方法。等待响应是什么意思?是否要按顺序发送循环请求这里有一种通用的非jquery技术可以做到这一点。也可以轻松地执行多线程(同时请求):它将冻结浏览器它将冻结浏览器
$.ajax({
async: false,
...