成长脚印-专注于互联网发展
【解决】AJAX返回再度调用AJAX时两者返回参数混乱解决
post by:天之骄子 2012-9-27 0:27

问题如下

需要实现如下功能流程: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)是不会执行的。
如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句。

但可否解决文章提出的问题呢?

记住:第二次ajax请求发生在第一次请求的数据返回完成阶段(success),并不是在ajax程序之外。所以并不能解决上述的参数混乱问题。

 

 

 

 

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容