ajax同步警告

遇到需要同步执行ajax的情况。chrome浏览器出现warning:SynchronousXMLHttpRequestonthemainthreadisdeprecat... 遇到需要同步执行ajax的情况。chrome浏览器出现warning:Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
这个警告遇到过多次。
场景:ajax改变全局变量供后面代码使用,
问题:如何避免出现此类警告。或者有没有其他的替代的方法。
对jquery不甚熟悉,还望各位不吝赐教。
展开
 我来答
伍芷倩
2018-04-05 · TA获得超过1万个赞
知道小有建树答主
回答量:80
采纳率:100%
帮助的人:2万
展开全部

ajax出现的同步警告是无法避免的,其实是造成主线程锁死主要还是XMLHttpRequest没有设置超时处理。

jquery ajax异步的执行方案:

1、添加async:false.即修改为同步,代码如下:

function getAjaxReturn() 

var bol=false; 

$.ajax({ 

type:"POST", 

async:false, 

http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx"

data:"username="+vusername.value, 

success:function(msg){ 

if(msg=="ok"){ 

showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 

// return true; 

bol=true; 

else 

showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 

vusername.className="bigwrong"; 

//return false; 

}); 

return bol; 

2、 通过传入一个函数解决这个问题,代码:

function getAjaxReturn(success_function,fail_function) 

var bol=false; 

$.ajax({ 

type:"POST", 

http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx"

data:"username="+vusername.value, 

success:function(msg){ 

if(msg=="ok"){ 

showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 

success_function(msg); 

else 

showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 

vusername.className="bigwrong"; 

fail_function(msg); 

//return false; 

}); 

function success_function(info) 

//do what you want do 

alert(info); 

funciont fail_function(info) 

//do what you want do 

alert(info); 

正定残疾人Cec5c
2015-09-18 · TA获得超过423个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:269万
展开全部
同步请求容易造成主线程锁死,所以它不建议你这么干。
追问
刚刚找了下,和大家分享一下。采用Web Workers多线程执行,采用postMessage和onmessage实现数据交换,这样处理不会阻塞主线程。
追答
其实是造成主线程锁死主要还是XMLHttpRequest没有设置超时处理。用jquery的话,一般来说设置timeout就行了。不用插件就比较难搞了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彭章贤
2015-09-18
知道答主
回答量:2
采纳率:0%
帮助的人:2.1万
展开全部
这是个bug 很多人都遇到过 所以 没办法避免
追问
刚刚找了下,和大家分享一下。采用Web Workers多线程执行,采用postMessage和onmessage实现数据交换,这样处理不会阻塞主线程。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式