今天做的功能,需要通过ajax获取数据。
以前一直用异步请求的
这次 意识兴起 要么在 点击事件中 使用同步的ajax获取数据如何
于是心里美美的开始做了
xhrForGetCompanyInfo.open("get",url,false);
都写完了 ,调试一下
结果 竟然报错了,下面是异常信息
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
我英语不好,翻译了下
大概意思就是:在主线程里使用同步的ajax请求对用户体验有影响,所以不让用了。。。。。
哦对了 我用的是 chrome浏览器(其他浏览器 我没试验)
我就想问问了 ,,同步的ajax不让用了么 ???!!!!!
本想挂点豆的 ,但是目前 4分 ,发完问题 会有6分 ,,但是 算了 一个豆都不放了
大家交流下啊
这,搞段代码看看?这个错误提示看起来更像是警告。而且jQuery源码也是你这种方式,没见不能跑啊。
我也觉得很奇怪。问题是 ,这个还真不是 警告。在chrome中调试,根本没发请求。
并且 直接这个语句就报错了
onreadystatechange事件也没有执行,一次都没执行
改成 true 也就是异步请求 , 就ok 那说理去
jquery的话 我还真 只是浅浅的了解一些 , 当然也只是 很浅浅的。
不过看上面的提示 是主线程 里 不让用。 可以 貌似 js是 单线程的 吧 。。很郁闷 。 完全没有思路
查资料都不知道该怎么查
@算了: 先用jquery试试,看看会不会有这个问题。然后再多检查一下你的用法。
@算了: http://sympmarc.com/2015/02/02/synchronous-xmlhttprequest-warning-with-spservices-and-recent-browsers/
@幻天芒: 这两天有点忙,明后天吧,我弄个例子出来。把代码贴上 看看吧。
@幻天芒:
这两天我试验了下 ,确实 不管异步的还是 同步的 都正常
然后我又看了下 当时出问题的代码。
当时是和百度地图API掺和在一起的。。。有点不想接着研究了,哎 没精力 了。。。。。。。。。。。
不好意思啊 ,, 恐怕是要无疾而终了
@算了: 这个奇怪的问题,跳过了也好。
@幻天芒: 今天又遇到一次
是在 js的onsubmit事件中 使用同步ajax做一些检查,检查通过才让提交。
至于为什么要这样做,而不把检查放到 后台中做呢。。哎这个暂且不说了。
遇到问题的总结
在obsubmit事件中 使用同步ajax请求 会chrome浏览器会给出警告信息
上次认为是异常
1:可能是其他原因导致的吧(然后直接就把代码改了。所以还真不好所)
2:还有就是chrome调试的时候,语句会有红色下下划线,跟异常的是一样的
这次有遇到了 ,不过除了一个警告,其他还都正常。所以。。。在这里说一下
嘿嘿
@算了: 因为在js的最佳实践中,同步方法是不被推荐的。而且,XMLHttpRequest中的同步代码就是一个遗留API。所以,个人觉得,google是想从这方面纠正这样的使用方式吧。
@幻天芒: 嗯嗯 了解 3Q
额,直接用jquery的ajax不好么?
jquery 不也是 js也得么 ? 目前对jquery不感冒。
你用的 这个 插件 不让 同步,
换jquery吧
没有用 插件
用js写的 。
我也遇到这个问题了,并且是和百度地图同时使用的时候,我用dwr发送ajax请求,还没解决呢,求支招:
这里面有2个概念。
一个是Ajax请求分异步和同步2种模式。如果请求是同步的,在请求返回之前线程会一直阻塞,如果请求是在主线程中发起的,那就会造成整个浏览器阻塞。
另外一个就是主线程。这段话应该是针对HTML5说的,因为在HTML5以前,JavaScript是完全的单线程方式,主线程之外不存在其他线程。但在HTML5中增加了Worker对象,每个Worker运行在一个独立的线程中,Worker线程被阻塞一般是不会影响主线程和浏览器的。因此,如果非要使用同步的Ajax(这种情况应该很少见),那就放到Worker线程中吧,千万千万不要放到主线程里。
用谷歌估一下
看下你的页面中是否有form,在form上加onsubmit="return false"就可以了
我也遇到这个问题了,这个只是一个友好的提醒,在主线程上用同步的请求,会导致阻塞,必须得等到请求完毕并且有了返回(正确或错误),才能执行后面的代码,用户体验来说,就是卡了啊,这种就会出现在这种友好的提示,不过,我的场景就是要使用同步的请求方式。