Прервать предыдущий запрос ajax на новый запрос



у меня есть функция, которая запускает вызов ajax при изменении входных данных.



но есть вероятность, что функция будет запущена снова до завершения предыдущего вызова ajax.



мой вопрос в том, как бы я прервал предыдущий вызов ajax перед началом нового?
Без использования глобальной переменной. (См. ответ на аналогичный вопрос здесь)



jsfiddle мой текущий код:



Javascript:



var filterCandidates = function(form){
//Previous request needs to be aborted.
var request = $.ajax({
type: 'POST',
url: '/echo/json/',
data: {
json: JSON.stringify({
count: 1
})
},
success: function(data){
if(typeof data !== 'undefined'){
jQuery('.count').text(data.count)
console.log(data.count);
}
}
});
};

if(jQuery('#search').length > 0){
var form = jQuery('#search');
jQuery(form).find(':input').change(function() {
filterCandidates(form);
});
filterCandidates(form);
}


HTML:



<form id="search" name="search">
<input name="test" type="text" />
<input name="testtwo" type="text" />
</form>
<span class="count"></span>
658   4  

4 ответов:

 var currentRequest = null;    

currentRequest = jQuery.ajax({
    type: 'POST',
    data: 'value=' + text,
    url: 'AJAX_URL',
    beforeSend : function()    {           
        if(currentRequest != null) {
            currentRequest.abort();
        }
    },
    success: function(data) {
        // Success
    },
    error:function(e){
      // Error
    }
});
var filterCandidates = function(form){
    //Previous request needs to be aborted.
    var request = $.ajax({
        type: 'POST',
        url: '/echo/json/',
        data: {
            json: JSON.stringify({
                count: 1
            })
        },
        success: function(data){
            if(typeof data !== 'undefined'){
                jQuery('.count').text(data.count)
                console.log(data.count);
            }
        }
    });
    return request;
};

var ajax = filterCandidates(form);

сохранить в переменной, а затем, перед отправкой во второй раз, проверить его readyState и звонок abort() при необходимости

попробуйте этот код

var lastCallFired=false;

var filterCandidates = function(form){

    if(!lastCallFired){
    var request = $.ajax({
        type: 'POST',
        url: '/echo/json/',
        data: {
            json: JSON.stringify({
                count: 1
            })
        },
        success: function(data){
            if(typeof data !== 'undefined'){
                jQuery('.count').text(data.count)
                console.log(data.count);
            }
        }
    });
        setInterval(checkStatus, 20);

    }

};

if(jQuery('#search').length > 0){
    var form = jQuery('#search');
    jQuery(form).find(':input').change(function() {
        filterCandidates(form);
    });
    filterCandidates(form);
}

var checkStatus = function(){
        if(request && request.readyState != 4){
            request.abort();
        }
    else{
        lastCallFired=true;
    }
};

вариант принятого ответа и принятый из комментария к вопросу-это отлично сработало для моего приложения....

используя $jQuery.пост.)(...

var request = null;

function myAjaxFunction(){
     $.ajaxSetup({cache: false}); // assures the cache is empty
     if (request != null) {
        request.abort();
        request = null;
     }
     request = $.post('myAjaxURL', myForm.serialize(), function (data) {
         // do stuff here with the returned data....
         console.log("returned data is ", data);
     });
}

вызовите myAjaxFunction () столько раз, сколько вам нравится, и он убивает все, кроме последнего (у моего приложения есть "селектор даты" на нем и меняет цену в зависимости от выбранных дней - когда кто-то нажимает на них быстро без вышеуказанного кода, это бросок монеты, если они получат правильную цену или нет). не. С его 100% правильно!)

Comments

    Ничего не найдено.