2012-07-10 5 views
0
나는 새 통화를 이전 호출을 중단하고 할 필요가 있기 때문에 나는 자동 완성 검색 옵션의 종류에 일하고 그것을 위해 내가 jquery's abort function을 사용했다

모든 keypress에 시작 중단 아래의 코드JQuery와 아약스

if(ajaxCall) ajaxCall.abort(); 
ajaxCall = $.ajax({ 
    url: '<?php echo base_url(); ?>welcome/' + target, 
    beforeSend: function() {}, 
    complete: function() {}, 
    data: data, 
    type: 'post', 
    success: function(result) { 
     .... 
    } 
}); 
에게 있습니다

하지만 잘 작동하지만,이 방법을 사용하는 것이 좋든 그렇지 않든 상관없이 사용법에 대해 우려하고 있습니다. 왜냐하면 방화군 콘솔에서 많은 중단 된 호출을 볼 수 있기 때문입니다. 나는 중단 된 전화가 문자 그대로 서버에서 중단되지 않았다고 생각하지만 브라우저에서만 볼 수 있습니다.

이 접근 방식에 대한 다른 대안이 있는가 또는이를 사용하기 괜찮습니다?

+1

매우 키 누르기에 대한 새 요청을 보내는 것은 끔찍한 생각입니다. 사용자가 타이핑을 중단 할 때만 요청이 전송되도록 디 바운싱 플러그인을 원하는 것처럼 들립니다. – ThiefMaster

+0

@ ThiefMaster 내 관심사가 유효하다는 것을 의미합니다. 이것은 공정한 해결책이 아닙니다. 일부 디버깅 플러그인의 이름을 알려주시겠습니까? 아무도 들어 본 적이 없다 – Junaid

+0

Underscore.js에 대한 기능이 포함되어 있습니다. – ThiefMaster

답변

0

당신이 abort()를 호출 할 때 HTTP 연결이 종료됩니다. 이것이 PHP 스크립트 (CodeIgniter를 사용하는 것처럼 보입니다)를 중지시키는 지 여부는 서버 설정에 따라 다르지만, 기본값은 예입니다.

에 관계없이 서버가 비록 요청을 완료 여부의, 그 결과는 결코이 클라이언트로 전송되지 않습니다, 그래서 결과는 표시 될하지 않습니다.

그러나 나는 에게의 모든 요청을 중단한다고 요청합니다. 나는 자동 완성 코딩 된 경우에, 나는 요청, 또는이 요청을 완료하고 표시 할 수 있도록 전송하기 전에 활동 (예를 들어, 사용자 정지 입력)의 기간을 감지 것 중 하나; 일부 결과 (결과가 1 자 이상이라도) 결과가없는 것보다 낫습니다. 맞습니까?

+0

예 CI,'결과가 클라이언트에 절대 전송되지 않으므로 결과가 표시되지 않는다. '라는 메시지는 어떤 경우에도 호출이 웹 서버로 전송 될 가능성을 의미합니다 ? 그 비활성 기간을 얻는 방법에 대한 아이디어를 주시겠습니까 – Junaid

+1

@Junaid : 예, * 중단 될 때 사용자가 다음 키를 얼마나 빨리 누르는지에 달려 있습니다. 연결이 성립되기 전, 요청 중에, * 후에 * 될 수 있습니다. – Matt

+0

@Junaid : 비 활동 기간은 키 누름에 간단한'setTimeout'을 사용하여 계산 될 수있다, 또는 당신이 그런 http://code.google.com/p/jquery-debounce/ – Matt