【解决】AJAX返回再度调用AJAX时两者返回参数混乱解决

问题如下

需要实现如下功能流程: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程序之外。所以并不能解决上述的参数混乱问题。

 

 

 

 


阅读本文后,您的心情是:
 
恶心
愤怒
强赞
感动
路过
无聊
雷囧
关注
知识共享许可协议
评论(0) 浏览(18420) 引用(0)
引用地址:http://blog.baiwand.com/tb.php?sc=5d9867&id=62
Tags:
« 【分享】时间以几分钟、几小时前、几天前等时间差显示的js函数 【解决】ThinkPHP整合Html编辑器时出现自动转义的问题 »

Blogger

  • blogger
  • 天之骄子
  • 职位:研发工程师
    铭言:
    阳光与欢乐同在,
    与我同在
    主页:
    blog.baiwand.com

分类目录

日志归档

主题标签

数据统计

  • 日志:151篇
  • 评论:45条
  • 碎语:264条
  • 引用:0条

链接表

随机日志 »

最新日志 »

最新评论 »

标签云 »

订阅Rss
sitemap