xhr ajax中止后重新启动

时间:2015-07-23 17:44:56

标签: javascript jquery ajax

我有一个像这样的http长轮询民意调查:

   xhr = $.ajax({
                    type: "GET",
        url: "http://localhost/pubsub.php",
        ...

Ajax返回一个xhr对象。我在另一个函数中使用它来通过执行xhr.abort();

来中止长轮询请求

执行此操作后,如何重新启动长轮询请求?有没有方法可以重启?

由于

2 个答案:

答案 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;
&#13;
&#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
                    }
                }
            });
}

我希望上面的代码行可能会给你一些想法。

此外,在错误回调中,检查以捕获中止并单独处理它。

相关问题