javascript - jQuery同时ajax多次的问题。
可能没有说清楚,我再说一点,我们的接口是向别的服务器请求数据,那台服务器平时压力比较大,返回速度不是很快,如果返回快的话我们也做成一条请求了。
现在问题是:
- 如果商品数量很多的话(比如30种),有几次ajax返回的是
502
,这个502
出现的原因是不是处理ajax的方法压力太大? - 如何解决502的这种情况?
- 我们尝试用
setInterval
延迟200ms
发送ajax,发现可以解决大部分502的问题,但是有时候仍有部分是502.
回复内容:
现在题主有一个页面,列出的是多种商品,等这个页面加载完毕后遍历出所有的商品编号,然后循环向一个地址发送ajax取商品的信息,
可能没有说清楚,我再说一点,我们的接口是向别的服务器请求数据,那台服务器平时压力比较大,返回速度不是很快,如果返回快的话我们也做成一条请求了。
现在问题是:
- 如果商品数量很多的话(比如30种),有几次ajax返回的是
502
,这个502
出现的原因是不是处理ajax的方法压力太大? - 如何解决502的这种情况?
- 我们尝试用
setInterval
延迟200ms
发送ajax,发现可以解决大部分502的问题,但是有时候仍有部分是502.
应该是session被锁住了,同一个用户只能串行的访问开启了session的站点,比如同一个用户访问A页面和B页面(都开启了session),A页面运行(session_start)时会把session锁住,不让别的页面获得,B页面就得等这个锁,等A页面运行完了,锁释放了,B页面才能运行。所以当同时ajax访问多个页面时,后面的页面结果一定要等待前面页面展示后才能在服务端运行展示,如果页面运行慢就会导致后面请求502情况
解决方法:不用session,或者session用完后立刻用session_write_close释放session锁
建议修改一下后端接口,改为传一个商品编号的列表给后端,然后返回一个商品信息的列表,一次ajax请求就可以了。
同意一次请求的说法, 犹豫你多次请求在页面端刚打开的时候会有延迟, 这样会造成不好的体验. 既然是列表为什么不把数据一次做好呢.
给你个不用并发的解决方案就是一次性把所有id都传到服务器端去。
如果非要传多个ID,可以在每次ajax调用成功后再触发下一次请求,这样请求就变成串行的了。
还有一个招,就是用$.ajaxSetup({async: false});
.
上一篇: 看看老外是如何理解抽象类的
推荐阅读
-
JavaScript开发jquery对ajax的支持介绍
-
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
-
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
-
基于Jquery.history解决ajax的前进后退问题
-
jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
-
jQuery.ajax向后台传递数组问题的解决方法
-
jquery.ajax的url中传递中文乱码问题的解决方法
-
jQuery.Form实现Ajax上传文件同时设置headers的方法
-
jQuery中ajax的使用与缓存问题的解决方法
-
详解闭包解决jQuery中AJAX的外部变量问题