我有一个http长轮询,如下所示:
xhr = $.ajax({
type: "GET",
url: "http://localhost/pubsub.php",
...
Ajax返回一个xhr对象。我在另一个函数中使用它,通过执行xhr.abort()来中止长轮询请求;
完成此操作后,如何重新启动长轮询请求?有没有重启的方法?
谢谢
发布于 2015-07-24 02:10:39
目前还没有用于重启AJAX的API,但是您可以通过在error
回调函数中再次调用AJAX来模拟AJAX的重启。
var xhr;
function callAJAX() {
xhr = $.ajax({
url: "http://stackoverflow.com/dummyURL",
error: function (xhr, e) {
console.log("Error Occured " + e);
callAJAX(); // Restart the AJAX call
}
})
}
callAJAX();
xhr.abort()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
发布于 2015-07-24 02:23:46
这是我在我的项目中所做的,
如果我在ajax响应中看到很长的延迟,我只需中止前面的ajax请求,并使用如下所示的相同方法发出一个新请求,
注意:我不会在任何循环中调用GetData() m方法,而是应用程序用户的一个按钮单击操作(比如刷新)。
function GetData()
{
if (getDataAjaxCall && getDataAjaxCall.readyState != 4)
getDataAjaxCall.abort();
var searchRequest = {};
searchRequest.Criteria = []; //set some criteria
getDataAjaxCall = $.ajax({
url: 'api/DataController/GetData',
type: 'POST',
dataType: 'json',
data: searchRequest,
success: function (data, textStatus, xhr) {
//do tasks you want on success
},
error: function (xhr, textStatus, errorThrown) {
$.unblockUI();
if (textStatus != 'abort') {
//display error message on actual error
}
}
});
}
我希望上面的几行代码能给你一些启发。
此外,在错误回调中,选中以捕获中止并单独处理它。
https://stackoverflow.com/questions/31594577
复制相似问题