Abort previous ajax request on new request

后端 未结 5 506
感动是毒
感动是毒 2020-11-27 02:57

I have a function that runs an ajax call on the change of an input.

But, there is a chance that the function will be fired again before the previous ajax call has co

相关标签:
5条回答
  • 2020-11-27 03:17

    Try this code

    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;
        }
    };
    
    0 讨论(0)
  • 2020-11-27 03:19
     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
        }
    });
    
    0 讨论(0)
  • 2020-11-27 03:23

    a variation on the accepted answer and adopted from a comment on the question - this worked great for my application....

    using jQuery's $.post()....

    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);
         });
    }
    

    Call myAjaxFunction() as many times as you like and it kills all except the last one (my application has a 'date selector' on it and changes price depending on the days selected - when someone clicks them fast without the above code, it is a coin toss as to if they will get the right price or not. With it, 100% correct!)

    0 讨论(0)
  • 2020-11-27 03:24
    if(typeof window.ajaxRequestSingle !== 'undefined'){
      window.ajaxRequestSingle.abort();
    }
    
    window.ajaxRequestSingle = $.ajax({
      url: url,
      method: 'get',
      dataType: 'json',
      data: { json: 1 },
      success: function (data) {
        //...
      },
      complete: function () {
        delete window.ajaxRequestSingle;
      }
    });
    
    0 讨论(0)
  • 2020-11-27 03:27
    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);
    

    save in a variable, and then, before sending second time, check its readyState and call abort() if needed

    0 讨论(0)
提交回复
热议问题