php
  • jquery
  • ajax
  • 2013-10-28 44 views 1 likes 
    1

    我有一個腳本停止以前的阿賈克斯新的請求時

    $('#postinput').on('keyup',function(){ 
        var txt=$(this).val(); 
    
        $.ajax({ 
         type: "POST", 
         url: "action.php", 
         data: 'txt='+txt, 
         cache: false, 
         context:this, 
         success: function(html) 
         { 
          alert(html); 
         } 
    
        }); 
    
    }); 
    

    假如有人類型一,阿賈克斯運行。立即他鍵入b c等等。 Ajax每次運行。有新方法可以阻止先前的請求嗎?

    +0

    你爲什麼不開始只有一個請求最後一次擊鍵之後?的 – Andreas

    +0

    可能重複的[中止使用jQuery Ajax請求(http://stackoverflow.com/questions/446594/abort-ajax-requests-using-jquery) – 2013-10-28 12:04:51

    +0

    @Andreas我使用加載圖像顯示處理。 'setTimeout'給我加載圖像顯示隱藏的問題。 – Ace

    回答

    1

    您可以使用xhrabort()方法。試試這個:

    var currentXhr; 
    $('#postinput').on('keyup',function(){ 
        currentXhr && currentXhr.readyState != 4 && currentXhr.abort(); // clear previous request 
    
        var txt = $(this).val(); 
        var currentXhr = $.ajax({ 
         type: "POST", 
         url: "action.php", 
         data: 'txt=' + txt, 
         cache: false, 
         context:this, 
         success: function(html) { 
          alert(html); 
         } 
        }); 
    }); 
    

    如果你不想使用全局變量,你可以在xhr存儲在#postinput元素的data-*屬性。

    另一種方法是隻火AJAX請求時,用戶已經停止打字:

    var timer; 
    $('#postinput').on('keyup',function(){ 
        clearTimeout(timer); 
    
        var txt = $(this).val(); 
        var timer = setTimeout(function() { 
         $.ajax({ 
          type: "POST", 
          url: "action.php", 
          data: 'txt=' + txt, 
          cache: false, 
          context:this, 
          success: function(html) { 
           alert(html); 
          } 
         }); 
        }, 100); // sends request 100ms after typing stops. 
    }); 
    
    +0

    嘿tnx。我想問兩件事。不管我試圖做什麼......停止Ajax是不是一個錯誤的做法?假設我使用多個Ajax。上面的代碼不會影響其他的ryt? – Ace

    +0

    停止AJAX並不是一件壞事。我認爲停止過時的AJAX請求是一件非常好的事情。通過存儲參考,您只會停止處理該特定請求,其他所有參數都不會受到影響。 –

    0

    你可以這樣做與Jquery-

    jaxRequests = new Array(); 
    
    queueRequest = function(whatever, you, want) { 
        if(ajaxRequests[ajaxRequests.length - 1]) { 
         ajaxRequests[ajaxRequests.length - 1].abort(); 
        } 
    
        ajaxRequests[ajaxRequests.length] = //Insert New jQuery AJAX call here. 
    } 
    
    相關問題