2011-09-21 2 views
0

이 질문은 자동 완료 인터페이스 (JavaScript는 실시간 아약스 관련 내용)를 작성 또는 테스트 한 사용자에게 매우 익숙합니다.이벤트에 jQuery.ajax() 종료 (서버에 대한 아약스 연결 종료)

저는 실시간 양식 유효성 검사를 코딩하고 있습니다. 사용자는 사용자 이름을 입력하고 그가 입력 할 때 "OK"또는 "Taken"마사지를 볼 수 있습니다.

1) 나는 모든 keyup() 또는 change() 이벤트

2) 그래서 때 사용자 유형 빠른에 $.ajax() 화재와 연결이 열려있는 연결이 많이있을 수 있습니다 느린 :

문제입니다. 마지막 하나를 제외한 나머지는 모두 국소 적이므로 종료해야합니다.

3) 또한 서버에 대한 핑은 100ms에서 400ms까지 다양 할 수 있으므로 국소 응답은 없습니다 (!!!)

반드시 수정해야합니다.

어떻게해야합니까?

답변

0

요구 사항을 충족하는 경우 가장 쉬운 방법은 표준 JQuery UI Autocomplete plugin을 사용하는 것입니다. 이것은 당신을 위해 배관을 처리합니다.

더 복잡한 요구 사항의 경우 사용자가 직접 롤 수 있습니다. 이 bindWithDelay plugin은 키 누르기 이벤트를 지연시키는 데 매우 편리합니다. @Vlad가 지적했듯이, Ajax 쿼리를 실행하면 jqXHR 객체에 대한 참조를 유지해야하므로 두 번째 요청이있을 경우 요청을 취소 할 수 있습니다.

if (jqXHR && jqXHR.readyState !== 4) { 
    jqXHR.abort(); 
} 

jqXHR = $.ajax({ 
    ... 
}); 

Ajax 요청이 중단 되더라도 서버는 요청을 계속 처리하므로 서버 자원을 계속 소비합니다. 물론 Ajax cal의 오류 처리기에서 status === "abort" 오류를 무시하십시오.

+0

세부 사항에 대해 특별히 감사드립니다. – Dan

1

http://api.jquery.com/jQuery.ajax/#jqXHR

JQuery와 아약스 기능은 jqXHR 객체를 돌려줍니다. 이전 요청을 종료하는 데 .abort() 메서드를 사용할 수 있습니다.

+0

아주 좋은 대답입니다. SA에 오신 것을 환영합니다. – Dan

0

일부 아약스 라이브러리는 중단 요청을 지원하지만 연결 플러딩에 대해서는 조금 더 신중하고 선제 적으로 노력할 것입니다.

나는 당신이 요청을 취소에서 엄청난 성능 향상을 볼 수 있다고 생각하지 않기 때문에

는 대부분 서버는 이미 패킷을 전송하고 그들은 대역폭에게 어느 쪽이든을 소모합니다.

스팸 요청을 방지하는 간단한 방법은 새로운 요청 (예 : 200ms)을 트리거하는 데 약간의 지연이 발생 한 다음 시간 초과 전에 새로운 요청이 트리거되면 타이머를 다시 시작하여 물론 최대 임계 값으로 설정하는 것입니다.

예 : 최소 1 초당 할당량.

이렇게하면 2 개의 중복 이벤트를 포착하는 이중 트리거링을 방지 할 수 있습니다.