2012-04-04 3 views
4

나는 단지 묻고 싶었다. 사용자가 도시를 입력 할 수 있도록 텍스트 입력이 있습니다.jQuery AJAX Calls - 원치 않는 전화를 취소 할 수 있습니까?

jQuery에는이 입력에 연결된 keyup 이벤트가 있고 각 문자 변경 후 AJAX 호출이 전송됩니다.

그러나 사람이 입력 할 때 많은 불필요한 AJAX 전화가 보내지는 것으로 나타났습니다. 결과의 수에 따라 여기에서 성능이 저하 될 수 있습니다.

새 전화를 걸면 AJAX 통화를 취소 할 수 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?

예는 여기에서 볼 수있다 : www.datingjapan.co

+1

Adam, 함수를 호출하기 전에 최소 문자 제한을 적용 했습니까? 최선의 방법은 50 번 전화하고 원하지 않는 40 번을 제적하는 것과 달리 원하는 것을 부를 때까지 전화하지 않는 것입니다. 또는 반품 데이터에 응답 제한을 부과합니까? 보통 – Blake

+0

에는 2 개의 컨트롤이 있습니다. 하나는 너무 많은 문자가 입력 된 후에 아약스를 시작하기 시작합니다 (3-4). 다른 하나는 1/2 초 안에 아무 것도 입력되지 않으면 아약스로 전송하는 것입니다. 그렇지 않으면 데이터베이스가 너무 많이 손상되어 사용자 상호 작용이 느려질 수 있습니다. – Rodolfo

답변

3

당신은 (get 같은 다른 AJAX 방식과는 너무 jqXHR 인스턴스를 반환 post)에 ajax 방법에 의해 반환 된 jqXHR 개체의 abort 방법을 사용할 수 있습니다 :

var xhr = $.ajax(opts); 
xhr.abort(); 

jqXHR 개체는 실제로는 XMLHttpRequest의 확장이며 XMLHttpRequestabort meth od.

+0

jquery로 이전 호출을 중단 할 수 있습니다. 이것은 중단이 서버에서 서버로 전송되고 작업이 취소됨을 의미합니까? 동일한 게시물 요청을 여러 번 보내면 모두 취소되거나 취소 할 수있는 방법이 있습니까? – Adam

+0

@Adam -'abort'는 클라이언트에서 서버로 전송됩니다. 각'jqXHR' 객체는 하나의 단일 요청을 나타냅니다. 'jqXHR'의 단일 인스턴스의'abort' 메소드를 호출하면 그 단일 요청은 취소됩니다. –

관련 문제