Bri*_*asa 6 javascript jquery long-polling netty
我正在尝试使用Netty和jQuery实现长轮询.
我让它与Chrome和Firefox一起正常工作,但Internet Explorer 8引起了我的问题.
我正在执行以下代码,该代码向我的服务器发送请求,等待直到从服务器收到响应,然后发送另一个请求.
function longPollRequest() {
$.ajax({
url: '/test-path',
type: 'GET',
success: function(data, textStatus, jqXHR) {
longPollRequest();
console.log('Received: ' + data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是,在IE8中,我遇到了一个无限循环,这会冻结浏览器.有趣的是,我的服务器只接收来自IE的第一个请求.对于发生的事情,我真的很困惑.如果有人有任何想法我会非常感谢你的帮助.
禁用缓存并查看是否可以解决您的问题:
function longPollRequest () {
$.ajax({
url : '/test-path',
type : 'GET',
cache : false,
success : function(data, textStatus, jqXHR) {
longPollRequest();
console.log('Received: ' + data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这将强制jQuery为每个请求附加时间戳.如果响应被缓存,那么它将很快返回,并且很有可能是导致无限循环的原因.
您还可以强制AJAX请求之间的最小延迟:
var lastRequestTime = 0;
function longPollRequest () {
$.ajax({
url : '/test-path',
type : 'GET',
cache : false,
success : function(data, textStatus, jqXHR) {
var delay = ((new Date().getTime()) - lastRequestTime);
if (delay > 1000) {
delay = 0;
} else {
delay = (1000 - delay);
}
setTimeout(longPollRequest, delay);
console.log('Received: ' + data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这将检查当前时间与最后一次AJAX请求的时间.如果它超过一秒钟,那么只需再次运行该函数而不会有延迟,否则使代码等待,直到请求之间经过一秒钟.可能有一种更优雅的方式来定义delay变量,但上面的代码应该让你开始.
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |