【发布时间】:2016-02-04 12:21:38
【问题描述】:
编辑:我检查了我的 ajax 调用是否设置为异步运行。该代码将每 10 秒触发一次 ajax_counter_upload,但所有请求将一直进行到第一个请求完成,并且会报告所有调用的 100% 进度。
我有一个需要几分钟才能完成的 ajax 调用。所以我创建了第二个,它将为用户提供第一次通话进度的状态更新。 它曾经工作得很好,但现在我看到第二次通话将比第一次通话更长时间,因此只有在第一次通话完成后才会提供反馈。什么都没有改变:没有更新,没有任何软件的版本变化等等 我的代码如下:
var intervalID;
function counterUpdater(){
intervalID = setInterval(ajax_counter_upload,10000);
}
function ajax_counter_upload(){
$.ajax({
type: "POST",
url: "plan/counter.php",
data: {tipo:'BP'},
success: function(data){
$("#spinner_msg").fadeTo(200,0.1,
function(){
$(this).html(data);
$(this).fadeTo(900,1);
});
}
});
}
function ajax_submit(){
var submit_val=$("#stato").serialize();
dest="plan/new_bp1.php";
$.ajax({
type: "POST",
url: dest,
data: submit_val,
success: function(data){
data1=data.split("|");
if(data1[0]=="Successo"){
$("#spnmsg").fadeTo(200,0.1,
function(){$(this).removeClass().addClass("spn_success").html(data1[1]).fadeTo(900,1)});
}else if(data1[0]=="Errore"){
$("#spnmsg").fadeTo(200,0.1,
function(){$(this).removeClass().addClass("spn_error").html(data1[1]).fadeTo(900,1)});
}
},
complete: function(){
clearInterval(intervalID);
$('#spinner_msg').html('');
setTimeout(function(){ $('.container').load('plan/home.php');},2000);
}
});
$('#spinner_msg').html('Avvio la creazione del nuovo business plan');
setTimeout(function(){counterUpdater();},2000);
}
所以每两秒 counterUpdater 就会神奇地向用户提供反馈。 注意:counterUpdater 调用会成功,但只会花费太多时间来完成
【问题讨论】:
-
实际上这是在 ajax_submit 运行时每 2 秒触发第二次 Ajax 调用的原因
-
听起来您的服务器一次只处理一个请求。关于第一个
ajax_counter_upload请求,您的网络选项卡(浏览器控制台)怎么说?待定状态?你确定你没有将全局ajax请求设置为同步吗?您可以使用$.ajaxPrefilter(function( options) { console.log(options.async); });进行检查 -
不,我没有将 Ajax 调用设置为同步,我确定并且已经验证。从一天到另一天,此代码按预期停止工作。第二个 Ajax(仅从单行表中检索一行)等待答案超过一分钟(查看控制台)
-
它是专用服务器、共享服务器还是本地服务器?
-
这是一个专用的、超大的(目前)服务器