为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码是多ajax同时请求,当服务器返回值时覆盖掉之前的请求结果,求解决方案!

以下代码是多ajax同时请求,当服务器返回值时覆盖掉之前的请求结果,求解决方案!

qq_花开花谢_0 2022-03-05 13:09:25
我同时调用了2个ajax函数用于发送,这2个都等待返回结果,当第二个返回时覆盖了第一个返回结果的值,请问如何解决这个问题,谢谢各位大虾了if (xmlhttp != null){xmlhttp.onreadystatechange = function postRequestStrAnswer(){if(xmlhttp.readyState == 4 && xmlhttp.status == 200){try{var objText = getReturnStr(xmlhttp.responseText);if (state==true && objText!=null) { RestoreHtml(objText);}if (asyncfun!=null && objText!=null ) { asyncfun(objText); }}catch(e) { alert(e); }}}xmlhttp.open("POST",url,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Accept-Encoding", "gzip, deflate");if (obj!=null) { postContent = postConversionStr(obj);}if (state==true) { postContent += "&" + postFormStr(); }xmlhttp.send(postContent);}
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

用队列请求
将你的ajax请求用一个队列数组保存起来
让后当第一个请求完成时调用第二个请求,或者用定时器
做法很简单,设置一个标识(bCompleted)用于判断当前请求是否完成,然后在ajax请求完成后将该标识bCompleted = true
定时器代码
var ajaxqueue = [];
var timer = setInterval(function(){
// 请求队列为空时,关闭定时器
if(ajaxquere.length == 0) {
clearInterval(timer);
return;
}
if(bCompleted) {
// 取请求队列的一个请求项
var nextAJaxRequestDataItem = ajaxqueue.shift();
// 执行ajax请求
doAjax(nextAJaxRequestDataItem );
// 设置标识为false,标识当前
bCompleted = false;
}
}, 100); // 时间自己定


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信