在搜索时阻止后台调用ajax

时间:2015-05-05 08:38:21

标签: jquery ajax

我有一个在后台运行的ajax ..

   var sTimeOut = function () {
        $.ajax(
        {
            type: "POST",
            url: '@Url.Action("checkJobIDs")',
            dataType: "json",
            async: true,
            success: function (data) {
        }
    });
}
var interval = 10000;
setInterval(sTimeOut, interval);

搜索一个元素我想停止在后台运行的另一个ajax。

   $.ajax(
    {
        type: "POST",
        url: '@Url.Action("searchData")',
        dataType: "json",
        mtype: "post",
        data: { str: str },
        async: true,
        complete: function () { $(sTimeOut).hide(); },
        success: function (data) {
            search(data.searched[0]);
        }
    });

如何在第二个ajax上工作时阻止第一个ajax?

1 个答案:

答案 0 :(得分:0)

你可以abort the request

您可以声明一个对象以保留当前正在执行的请求,并检查搜索是否正在运行。如果搜索正在运行,则另一个重新请求将被削减。

var request = {
    xhr: {},
    isSearching: false
};

var sTimeOut = function () {
    if(!request.isSearching) // prevent to run other request when is searching
    {
        request.xhr = $.ajax(
        {
            type: "POST",
            url: '@Url.Action("checkJobIDs")',
            dataType: "json",
            async: true,
            success: function (data) {

            }
        });
    }
}

  var interval = 10000;
  setInterval(sTimeOut, interval);

何时搜索请求被中止并阻止执行其他人。搜索完成后,您可以在后台恢复请求。

$.ajax(
{
    type: "POST",
    url: '@Url.Action("searchData")',
    dataType: "json",
    mtype: "post",
    data: { str: str },
    async: true,
    beforeSend: function() { // stop background process
        request.isSearching = true;
        request.xhr.abort()
    },
    complete: function () {  // resume background process
        request.isSearching = false;
    },
    success: function (data) {
        search(data.searched[0]);
    }
});