【发布时间】:2015-03-16 14:30:03
【问题描述】:
有时,我的应用程序中的 Ajax 调用(通过 JQuery 1.8)会长时间停留在“待处理”状态(有时长达 17 分钟)。 我用谷歌搜索过,所有可能的解决方案都不起作用:
- 我没有安装广告拦截器。
- 我在 Chrome 中禁用了“预测网络操作以提高页面加载性能”标志。
- 我还在 Ajax 调用中添加了一个查询字符串以使其唯一(以禁用任何 Chrome 缓存锁定)。
你知道如何解决这个问题吗?
在下面的示例中,请求等待了 17 分钟(通过 Fiddler 验证它仅在 17 分钟后发送)。
GET http://www.mywebsite.com/foo/rest/publishers/1/packages?_=1421584749323 HTTP/1.1
Host: www.mywebsite.com
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Content-Type: application/json
Referer: http://www.mywebsite.com/foo/client/home
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,he;q=0.6,ru;q=0.4
Cookie: JSESSIONID=C668509B5AFCDEBE9C9774C4721AFB9D;
aaassz="ddss"
看图:
【问题讨论】:
-
你有轮询周期吗?我也有这个问题,因为有很多请求(50 1,5 秒)。所以,chrome 一直等到他们完成,然后才(26 秒后)处理最新的请求,即使它只需要 0.1 秒。
-
我每 5 分钟有一个轮询周期。但是,我们看不出它如何证明 Chrome 停止 17 分钟是合理的。减少轮询间隔是否解决了您的问题?
-
根据developer.chrome.com/devtools/docs/…说明,停滞时间是请求在发送之前等待的时间。这个时间包括代理协商所花费的任何时间. 此外,此时间将包括浏览器等待已建立的连接可供重新使用的时间,遵守 Chrome 的每个源规则最多六个 TCP 连接。
-
我在发出请求时收到相同的待处理消息,在我的情况下,我从服务器端接收的数据存在一些问题,我选择了一个新的匿名类型(使用 C# 和 LINQ)而不是整个模型并发送它,它起作用了,但我不知道为什么。
-
如果您的一项服务未完成请求并发送响应,您最终将导致所有 ajax 请求处于待处理状态。查看第一个为您提供待处理状态的服务。
标签: jquery ajax google-chrome xmlhttprequest