我有一个javascript网络应用程序设置为使用.net服务器使用长轮询,使用ajax调用:
var _listenTimeout = 5 * 60 * 1000;
//...
$.ajax({
type: "GET",
url: url,
async: true,
cache: false,
dataType: "jsonp",
timeout: _listenTimeout,
success: callback
});
但是,当页面打开一段时间时会出现问题,其中对服务器的请求停止响应。它似乎处于一种不稳定的状态,数据包卡在Web浏览器之间,并被发送出网络到服务器。
我已经挖了,我知道几件事:
curl
发送相同的网址会立即回复。奇怪的是,有时它偶尔会工作,但延迟几分钟,即浏览器网络日志检测到请求得到响应(在我的情况下是204),wireshark检测到发送的请求(并在服务器端收到)。浏览器和wireshark的延迟是相同的,即发出请求,发生延迟,然后chrome检测到响应,并且wireshare检测到发送的数据包。
页面的干净刷新也解决了问题,几乎立即发生相同的请求/响应(使用相关的浏览器网络和wireshark日志)。
我在Chrome 21.0.1180.89和Firefox 14.01上尝试过它。
是否有某种浏览器队列在浏览器中被ajax请求阻塞?或许too many concurrent requests?现在不知道......
答案 0 :(得分:0)
$ .ajax不会定期发出请求。 timeout选项指定实际请求不用于轮询的延迟。在这里阅读它。 http://api.jquery.com/jQuery.ajax/。这就是为什么你只看到一个ajax请求。如果你想手动,你必须使用setTimeout javascript方法。
您可以在成功和错误回调中调用setTimeout,以便您可以摆脱并发的ajax请求。