在发送新消息之前终止先前的ajax请求

问题描述:

我试图跟踪数组中的ajax请求,并在下一个消息发出之前取消所有现有请求,但我得到$(this).abort()函数不存在。有任何想法吗?在发送新消息之前终止先前的ajax请求

var ajaxPool = new Array(); 

    $('.search_input').live('keyup', function() { 

      $.each(ajaxPool, function(){ 

       $(this).abort(); 

      }); 

      var query = $('.search_input').val(); 

      if (query == '' || query == ' ') { 

       $('.search_results').remove(); 
       return false; 
      } 

      var request = $.ajax({ type: 'GET', 
        url: '{{ path('Search') }}/' + query, 

        beforeSend:function() { 


        }, 
        success:function(data){ 

         $('.search_results').remove(); 
         $('.search_bar').append(data); 

        },       
        error:function(){ 

         alert("Could not complete search."); 

        } 
       }); 

       ajaxPool.push(request); 
     }); 
+1

使用'this.abort()''this'是xhr对象,将它转换成jQuery对象没有任何意义。 – bfavaretto 2012-03-02 13:20:39

+0

啊,谢谢...愚蠢的我。添加这个作为答案,我会接受它(一旦8分钟后)。 – ThinkingInBits 2012-03-02 13:24:03

当你与$.each迭代你ajaxPool阵列,this已经是jqXHR对象包含abort()方法。所以你不应该试着用$把它转换成jQuery对象。使用这个:

$.each(ajaxPool, function(){ 
    this.abort(); 
});