2014-05-21 2 views
1

나는이 질문이 여러 가지 방법으로 요구된다는 것을 안다. 나는 또한 그것을 작동시킬 수있다. 핵심 이벤트와 조합하여 작동하지 않습니다 ... .abort()가이 기능에서 작동하지 않는 이유는 무엇입니까?jQuery .abort() 키 업 이벤트

function setGlobalSearch(){ 
    var xhr; 
    $('#globalSearch').keyup(function(){ 
     if(xhr && xhr.readystate != 4){ 
      xhr.abort(); 
     } 
     var searchVal = $(this).val(); 
     xhr = $.ajax({ 
      type: "GET", 
      url: "/ajax.actions?i=globalSearch&q="+searchVal, 
      success: function(data) { 
       $('#globalSearchResults').html(data); 
      }, 
      dataType:"html", 
      cache:false 
     }); 
    }); 
} 

답변

1

abort() 기능은 요청이 전송 된 경우에만 실행됩니다. 나는 이것이 아마도 그럴 수 없다고 제안 할 수있다.

그러나 요청을 중단해야하는 필요성을 없애는 다른 패턴을 추천합니다. 이는 이전에 보았 듯이 약간의 벗겨지기 쉬운 경우입니다. 대신 입력이 밀리 초 단위로 중지되면 요청을 시작합니다. 사용해보기 :

var timer; 
$('#globalSearch').keyup(function() { 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     var searchVal = $(this).val(); 
     $.ajax({ 
      type: "GET", 
      url: "/ajax.actions?i=globalSearch&q="+searchVal, 
      success: function(data) { 
       $('#globalSearchResults').html(data); 
      }, 
      dataType:"html", 
      cache:false 
     }); 
    }, 150); // fire the AJAX request 150ms after typing stops. 
});