不想等到服务器响应 AJAX 请求
Posted
技术标签:
【中文标题】不想等到服务器响应 AJAX 请求【英文标题】:Do not want to wait till server response to the AJAX request 【发布时间】: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 中以“响应”时间中止。 【参考方案1】:您正在分配一个xhr
,然后可以使用它来中止对该函数的后续调用的请求。
function setNoti(ntotal)
if (xhr)
xhr.abort();
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;
);
不需要window.onbeforeunload
处理程序,因为它是一个单独的事件,很可能在错误的时间被调用。
【讨论】:
感谢您的回复...但没有锻炼。 xhr 是全局变量,可以在 setNoti() 函数之外访问 如果已定义,它将被中止。可能您还有一些其他代码与xhr
变量混淆。【参考方案2】:
我在服务器端添加了session_write_close()
,它运行良好。以下帖子帮助我找到了解决方案:)
Multiple AJAX requests delay each other
【讨论】:
以上是关于不想等到服务器响应 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章