최근 사용자가 Ajax 요청을 자주 클릭하면 두 가지 문제가 발생한다는 사실을 발견했습니다.
1. 연속으로 5개의 Ajax 요청을 클릭하면 처음 4개는 실제로 유효하지 않게 종료되어 리소스를 절약합니다.
2. 더 심각한 문제는 마지막으로 보낸 요청에 대한 응답이 마지막이 아닐 수 있어 혼란이 발생할 수 있다는 점입니다. 전송된 요청과 응답을 유지하려면 대기열도 필요합니다.
실제로 큐 구현을 설계했는데 나중에 보니 jQuery가 직접 중단 메서드를 사용하므로 이렇게 복잡한 구현이 필요하지 않습니다. 결국 다른 작업이 완료되기를 기다리고 있습니다.
jquery를 사용하여 ajax 요청, $.get, $.post, $.ajax 등을 보내는 것은 정말 편리하지만 때로는 Ajax 요청을 중간에 종료해야 하는 경우도 있습니다.
예를 들어 채팅을 위해 Comet을 사용할 때 서버는 일반적으로 요청을 보낸 후 링크를 새로 고치고 수십 초 후에 데이터를 반환합니다. 서버가 30초마다 링크를 새로 고친다고 가정해 보겠습니다. Ajax 요청을 10초에 중지하려면 어떻게 해야 할까요?
코드부터 시작해서 나중에 설명하겠습니다
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ ….//一些操作 }); ajaxGet.abort();
위 코드는 두 가지 지식 포인트로 구성됩니다.
1. $.get이 반환하는 데이터 유형은 XMLHttpRequest입니다. 매뉴얼을 참조하세요. ($.post, $.ajax, $.getJSON, $.getScript도 마찬가지입니다.)
2. XMLHttpRequest 객체에는 abort() 메서드가 있습니다
참고: abort() 후에 ajax 요청은 즉시 중지되지만 후속 function()은 계속 실행됩니다. 작업 수행을 피하고 싶다면 function() 시작 부분에 판단을 추가하면 됩니다
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ if(data.length == 0) return true; ….//一些操作 }); ajaxGet.abort();
Ajax 요청 종료:
var request = $.get(“ajax.aspx”,{id:1},function(data){ //do something }); //终止请求动作. request.abort();
중복 요청 방지:
var request; if(request != null) request.abort(); request = $.get(“ajax.aspx”,{id:1},function(){ //do something }); ajax & setTimeout实现 secondTry 在等待一秒之后将firstTry的ajax终止: var firstTry = $.ajax( //do something ); var secondTry = setTimeout(function(){alert(‘ok');firstTry.abort()},1000);