首页 新闻 会员 周边 捐助

关于AJAX 同步请求(我没分了)

0
[已解决问题] 解决于 2015-03-08 23:00

今天做的功能,需要通过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分  ,,但是 算了  一个豆都不放了

大家交流下啊

算了的主页 算了 | 初学一级 | 园豆:3
提问于:2015-03-03 10:04
< >
分享
最佳答案
0

这,搞段代码看看?这个错误提示看起来更像是警告。而且jQuery源码也是你这种方式,没见不能跑啊。

奖励园豆:5
幻天芒 | 高人七级 |园豆:37205 | 2015-03-03 11:00

 我也觉得很奇怪。问题是 ,这个还真不是 警告。在chrome中调试,根本没发请求。

并且 直接这个语句就报错了

onreadystatechange事件也没有执行,一次都没执行

 

改成 true 也就是异步请求 , 就ok 那说理去

 

jquery的话 我还真 只是浅浅的了解一些  , 当然也只是 很浅浅的。

不过看上面的提示  是主线程 里 不让用。 可以 貌似 js是 单线程的 吧 。。很郁闷 。 完全没有思路

查资料都不知道该怎么查

算了 | 园豆:3 (初学一级) | 2015-03-03 22:11

@算了: 先用jquery试试,看看会不会有这个问题。然后再多检查一下你的用法。

幻天芒 | 园豆:37205 (高人七级) | 2015-03-04 10:15

@算了: http://sympmarc.com/2015/02/02/synchronous-xmlhttprequest-warning-with-spservices-and-recent-browsers/

幻天芒 | 园豆:37205 (高人七级) | 2015-03-04 10:18

@幻天芒: 这两天有点忙,明后天吧,我弄个例子出来。把代码贴上 看看吧。

算了 | 园豆:3 (初学一级) | 2015-03-04 23:12

@幻天芒:

这两天我试验了下 ,确实  不管异步的还是 同步的 都正常

然后我又看了下 当时出问题的代码。

  当时是和百度地图API掺和在一起的。。。有点不想接着研究了,哎  没精力 了。。。。。。。。。。。

不好意思啊 ,, 恐怕是要无疾而终了

算了 | 园豆:3 (初学一级) | 2015-03-08 23:00

@算了: 这个奇怪的问题,跳过了也好。

幻天芒 | 园豆:37205 (高人七级) | 2015-03-09 09:29

@幻天芒: 今天又遇到一次

是在 js的onsubmit事件中 使用同步ajax做一些检查,检查通过才让提交。

至于为什么要这样做,而不把检查放到 后台中做呢。。哎这个暂且不说了。

 

遇到问题的总结
  在obsubmit事件中 使用同步ajax请求 会chrome浏览器会给出警告信息

上次认为是异常 

  1:可能是其他原因导致的吧(然后直接就把代码改了。所以还真不好所)

  2:还有就是chrome调试的时候,语句会有红色下下划线,跟异常的是一样的

 

这次有遇到了 ,不过除了一个警告,其他还都正常。所以。。。在这里说一下

嘿嘿

算了 | 园豆:3 (初学一级) | 2015-03-19 16:18

@算了: 因为在js的最佳实践中,同步方法是不被推荐的。而且,XMLHttpRequest中的同步代码就是一个遗留API。所以,个人觉得,google是想从这方面纠正这样的使用方式吧。

幻天芒 | 园豆:37205 (高人七级) | 2015-03-19 16:29

@幻天芒: 嗯嗯  了解 3Q

算了 | 园豆:3 (初学一级) | 2015-03-19 17:52
其他回答(6)
0

额,直接用jquery的ajax不好么?

羽商宫 | 园豆:2490 (老鸟四级) | 2015-03-03 10:46

jquery 不也是 js也得么 ? 目前对jquery不感冒。

支持(0) 反对(0) 算了 | 园豆:3 (初学一级) | 2015-03-03 22:08
0

你用的 这个 插件 不让 同步,

换jquery吧

小鸡哥 | 园豆:53 (初学一级) | 2015-03-03 17:13

没有用 插件

用js写的 。

支持(0) 反对(0) 算了 | 园豆:3 (初学一级) | 2015-03-03 22:12
1

我也遇到这个问题了,并且是和百度地图同时使用的时候,我用dwr发送ajax请求,还没解决呢,求支招:

小豆角 | 园豆:202 (菜鸟二级) | 2015-09-15 19:17

这里面有2个概念。
一个是Ajax请求分异步和同步2种模式。如果请求是同步的,在请求返回之前线程会一直阻塞,如果请求是在主线程中发起的,那就会造成整个浏览器阻塞。
另外一个就是主线程。这段话应该是针对HTML5说的,因为在HTML5以前,JavaScript是完全的单线程方式,主线程之外不存在其他线程。但在HTML5中增加了Worker对象,每个Worker运行在一个独立的线程中,Worker线程被阻塞一般是不会影响主线程和浏览器的。因此,如果非要使用同步的Ajax(这种情况应该很少见),那就放到Worker线程中吧,千万千万不要放到主线程里。

支持(0) 反对(0) 小豆角 | 园豆:202 (菜鸟二级) | 2015-09-15 19:22
0

用谷歌估一下

LiloT | 园豆:6 (初学一级) | 2015-10-25 21:01
0

看下你的页面中是否有form,在form上加onsubmit="return false"就可以了

醉紅塵┈┾ | 园豆:202 (菜鸟二级) | 2016-09-02 14:35
0

我也遇到这个问题了,这个只是一个友好的提醒,在主线程上用同步的请求,会导致阻塞,必须得等到请求完毕并且有了返回(正确或错误),才能执行后面的代码,用户体验来说,就是卡了啊,这种就会出现在这种友好的提示,不过,我的场景就是要使用同步的请求方式。

wycfcqt | 园豆:202 (菜鸟二级) | 2016-11-15 15:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册