2012-03-02 3 views
1

Я пытаюсь отследить запросы 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

+0

Ах спасибо ... глупо мне. Добавьте это в качестве ответа, и я приму его (как только 8 минут закончится.) – ThinkingInBits

ответ

0

Когда вы итерация вашего ajaxPool массива с $.each, this уже объект jqXHR, который содержит метод abort(). Поэтому вы не должны пытаться преобразовать его в объект jQuery с помощью $. Используйте этот параметр:

$.each(ajaxPool, function(){ 
    this.abort(); 
}); 
Смежные вопросы