问题如下:
需要实现如下功能流程:AJAX提交数据保存,成功返回后再次调用ajax获取更新后的记录列表,第二次ajax返回后将返回的数据替换到 class为box的DIV中。
function afun(msg){ msg=eval("("+msg+")"); if(msg.status=="msg_success"){ //如果返回状态为成功 ajaxSubmit('POST','URL2','type=1','bfun2','afun2'); } } function afun2(msg){ $(".box").html(msg); } $(".mood_submit").click(function(){ ajaxSubmit('POST','URL1','content='+content,'bfun','afun');//提交方式,提交地址,提交参数,发送前执行函数,返回后执行函数 })结果情况是,第一次提交正常,第二次到以后.box中被替换掉的就是第一次AJAX提交时返回的数据。期间也怀疑是不是第一次的msg的缓存导致的。但第二个AJAX都未被提交执行过(或是提交太快firebug都没抓捕到,可以肯定得事fun2是被执行到了。)
于是百度了一番,碰到一个遇到相同问题的人>>两个form表单同时提交(示例)
最后百试不得其解(试过延缓第二个AJAX提交动作,试过更改afun2()的参数,皆未成功),最终将第二个ajax提交换成JQ的load方法。问题得以解决。
所以最终的结论是,尽量避免两个ajax相互回调执行。返回参数会混乱的。
【补充】:有人说将AJAX设为async: false( 同步模式)来解决这个问题。可否呢?
先来看AJAX的async
$.ajax async
(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'json', success : function(data) { temp=data; } }); alert(temp);这个ajax请求则为同步请求,在没有返回值之前,alert(temp)是不会执行的。
但可否解决文章提出的问题呢?
记住:第二次ajax请求发生在第一次请求的数据返回完成阶段(success),并不是在ajax程序之外。所以并不能解决上述的参数混乱问题。