Method POST, Status (canceled) error message

前端 未结 6 1466
北恋
北恋 2021-02-20 04:08

I have the following code which is giving me a Method POST, Status (canceled) error message:

$(document).ready(function() {
    var xhr = false;

           


        
6条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-20 04:40

    In order to both fix your problem and save on the amount of Ajax calls I have written the following example. This example allows you to handle the following two situations:

    Situation 1:

    The user types slow enough (lets say about one key every 200+ miliseconds
    

    Situation 2:

    The user types fast (my average is about 20 to 50 miliseconds per key)
    

    In the following example there is no need to abort or ignore Ajax calls, you are not spamming Ajax calls and you are using an Object to handle your job. (I even jsFiddled it for you)

    var Handler = {
    
        /**
         * Time in ms from the last event
         */
        lastEvent: 0,
    
        /**
         * The last keystroke must be at least this amount of ms ago
         * to allow our ajax call to run
         */
        cooldownPeriod: 200,
    
        /**
         * This is our timer
         */
        timer: null,
    
        /**
         * This should run when the keyup event is triggered
         */
        up: function( event )
        {
            var d = new Date(),
                now = d.getTime();
    
            if( ( now - Handler.lastEvent ) < Handler.cooldownPeriod ) {
               // We do not want to run the Ajax call
                // We (re)set our timer
                Handler.setTimer();
            } else {
                // We do not care about our timer and just do the Ajax call
                Handler.resetTimer();
                Handler.ajaxCall();
            }
    
            Handler.lastEvent = now;
        },
    
        /**
         * Function for setting our timer
         */
        setTimer: function()
        {
            this.resetTimer();
            this.timer = setTimeout( function(){ Handler.ajaxCall() }, this.cooldownPeriod );
        },
    
        /**
         * Function for resetting our timer
         */
        resetTimer: function()
        {
            clearTimeout( this.timer );
        },
    
        /**
         * The ajax call
         */
        ajaxCall: function()
        {
            // do ajax call
        }
    
    };
    
    jQuery( function(){
    
        var field = jQuery( '#field' );
    
        field.on( 'keyup', Handler.up );
    
    });
    

    Hope this helps.

提交回复
热议问题