我有一个像这样的http长轮询民意调查:
xhr = $.ajax({
type: "GET",
url: "http://localhost/pubsub.php",
...
Ajax返回一个xhr对象。我在另一个函数中使用它来通过执行xhr.abort();
来中止长轮询请求执行此操作后,如何重新启动长轮询请求?有没有方法可以重启?
由于
答案 0 :(得分:0)
没有API可以重新启动AJAX,但您可以通过在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>
&#13;
答案 1 :(得分:0)
以下是我在项目中所做的事情,
如果我在ajax响应中看到很长的延迟,我只是中止先前的ajax请求并使用如下所示的相同方法发出新请求,
注意:我没有在任何循环中调用GetData()mmethod,而是应用程序用户的按钮单击操作(例如刷新)。
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
}
}
});
}
我希望上面的代码行可能会给你一些想法。
此外,在错误回调中,检查以捕获中止并单独处理它。