【发布时间】:2014-09-17 03:01:36
【问题描述】:
我使用 jQuery / PHP 创建了一个长轮询。它运行良好。问题是当用户单击其他链接或刷新当前页面时,它将挂在当前页面上,直到它从服务器的最后一个 AJAX 请求中获得响应。
我在服务器端设置了大约 30 秒来选择最新数据,这意味着如果有人发送了获取最新数据的请求,他将无法转到另一个页面或刷新当前页面,直到它返回响应。更糟糕的是,如果服务器没有找到最新的数据,它会在 30 秒后发送响应。
我已使用以下代码中止请求。
window.onbeforeunload = function(event) {
xhr.abort();
}
我在执行xhr.abort() 之前和之后检查了控制台,它显示readyState=1,然后是readyState=0。这是否意味着xhr.abort() 执行成功?但是为什么页面仍然挂在当前页面上,直到它返回响应。
请帮我解决我的问题。当用户单击其他链接或刷新页面或在页面上执行其他操作时,我不想等到服务器响应。
这是我的 jQuery 代码
function setNoti(ntotal)
{
var t;
xhr = $.ajax({
type: "POST", url: myURL, data: "", dataType: "JSON", cache: false, async: true,
success: function(data) {
// do my work here
clearInterval(t);
t = setTimeout(function() {
setNoti(20);
}, 1000);
return false;
},
error: function()
{
clearInterval(t);
t = setTimeout(function() {
setNoti(0);
}, 40000);
return false;
}
});
}
【问题讨论】:
-
"这是否意味着 xhr.abort() 执行成功?您将看到它在 Firebug 中以“响应”时间中止。
标签: php jquery ajax long-polling abort