2010-03-17 4 views
4

여러 비동기 아약스 요청으로 서버를 치는 맞춤 자바 스크립트 자동 완성 스크립트가 있습니다. (키가 누를 때마다)이전의 여러 비동기 아약스 요청을 무시합니다.

나중에 요청을받은 후 이전 아약스 요청이 반환되는 경우가 있습니다.

지금 내가 처리하는 방법에는 각 Ajax 요청에 대해 증가하는 카운터가 있습니다. 더 낮은 카운트로 돌아온 요청은 무시됩니다.

궁금합니다. 적절한가요? 아니면이 문제를 다루는 더 좋은 방법이 있습니까? 사전에

감사합니다, 마지막 XHR 요청의 구조를 보유하고

트래비스

+1

키를 누를 때마다 아약스 요청을 보내는 것은 몇 명의 동시 사용자가있을 때 yoru 서버에 과부하가 걸리는 대목입니다. 지연 타이머를 설정하여 지연 시간을 설정하여 0.5 초 동안 아무 키도 누르지 않은 경우에만 요청이 전송되도록 한 다음 사용자가 타이핑을 중지 할 때 한 번만 누르십시오. 예를 들어이 주석은 383 개의 서버 히트를 생성 할 수 있습니다 ... – Karl

+0

@ Karl, Agreed,하지만 이것은 여전히 ​​문제가 될 수 있습니다. – strager

답변

8

당신은 "글로벌"저장할 수 currentAjaxRequest. 그러면 새로 요청할 때 현재 요청이 abort이됩니다. 예를 들어

: 필요한 경우

var currentAjaxRequest = null; 

function autoCompleteStuff() { 
    if(currentAjaxRequest !== null) { 
     currentAjaxRequest.abort(); 
    } 

    currentAjaxRequest = $.get(..., function(...) { 
     currentAjaxRequest = null; 

     ... 
    }); 
} 

은 이름 충돌을 방지하기 위해, 익명, 즉시 - 실행 기능에 그 포장.

관련 문제