[JQUERY] 어떻게 jQuery를 AJAX 요청 중지 / 취소하려면?
JQUERY어떻게 jQuery를 AJAX 요청 중지 / 취소하려면?
해결법
-
1.JQuery와 아약스 방법은 XMLHttpRequest의 개체를 반환합니다. 당신은 요청을 취소하기 위해이 객체를 사용할 수 있습니다.
JQuery와 아약스 방법은 XMLHttpRequest의 개체를 반환합니다. 당신은 요청을 취소하기 위해이 객체를 사용할 수 있습니다.
XMLHttpRequest의 요청을 취소 중단이 방법을 가지고 있지만, 요청이 서버에 이미 전송 된 경우 다음 서버는 우리가 요청을 중단하지만, 클라이언트 / 대기 응답을 처리하지 않더라도 요청을 처리합니다.
XHR 객체는 상기 요청의 상태를 포함하는 readyState의 포함 (UNSENT-0, HEADERS_RECEIVED -2- 로딩 -3- 1 개방 DONE-4). 우리는 이전 요청이 완료되었는지 확인하려면이 사용할 수 있습니다.
$(document).ready( var xhr; var fn = function(){ if(xhr && xhr.readyState != 4){ xhr.abort(); } xhr = $.ajax({ url: 'ajax/progress.ftl', success: function(data) { //do something } }); }; var interval = setInterval(fn, 500); );
-
2.당신이 서버에 요청을 할 때, 진행이 null (또는 데이터를 가져 오는) 첫째하지 있는지 확인해야합니다. 그것은 이전 요청 중단, 데이터를 가져 오는 새로운 일을 시작하는 경우.
당신이 서버에 요청을 할 때, 진행이 null (또는 데이터를 가져 오는) 첫째하지 있는지 확인해야합니다. 그것은 이전 요청 중단, 데이터를 가져 오는 새로운 일을 시작하는 경우.
var progress = null function fn () { if (progress) { progress.abort(); } progress = $.ajax('ajax/progress.ftl', { success: function(data) { //do something progress = null; } }); }
-
3.나는이 조금 늦게 수 있습니다 알고하지만 난 중단 방법 didnt 한이 정말로 요청을 중단 부르심 유사한 문제가 발생합니다. 대신 브라우저는 여전히 사용 결코 응답을 기다리고 있었다. 이 코드는 문제를 해결.
나는이 조금 늦게 수 있습니다 알고하지만 난 중단 방법 didnt 한이 정말로 요청을 중단 부르심 유사한 문제가 발생합니다. 대신 브라우저는 여전히 사용 결코 응답을 기다리고 있었다. 이 코드는 문제를 해결.
try { xhr.onreadystatechange = null; xhr.abort(); } catch (e) {}
-
4.왜 요청을 중단해야합니까?
왜 요청을 중단해야합니까?
각 요청 5 초 이상 걸리는 경우, 어떤 일이 일어날 것인가?
당신은 요청 중단 요청과 함께 전달하는 매개 변수가 변경되지는 안합니다. 예를 들면 : - 요청 알림 데이터를 검색합니다. 이러한 상황에서, 좋은 접근 방법은 새로운 요청 만 이전 Ajax 요청을 완료 한 후 그 집합입니다.
$(document).ready( var fn = function(){ $.ajax({ url: 'ajax/progress.ftl', success: function(data) { //do something }, complete: function(){setTimeout(fn, 500);} }); }; var interval = setTimeout(fn, 500); );
-
5.당신은 JQuery와 - validate.js를 사용할 수 있습니다. 다음은 JQuery와 - validate.js에서 코드입니다.
당신은 JQuery와 - validate.js를 사용할 수 있습니다. 다음은 JQuery와 - validate.js에서 코드입니다.
// ajax mode: abort // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() var pendingRequests = {}, ajax; // Use a prefilter if available (1.5+) if ( $.ajaxPrefilter ) { $.ajaxPrefilter(function( settings, _, xhr ) { var port = settings.port; if ( settings.mode === "abort" ) { if ( pendingRequests[port] ) { pendingRequests[port].abort(); } pendingRequests[port] = xhr; } }); } else { // Proxy ajax ajax = $.ajax; $.ajax = function( settings ) { var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, port = ( "port" in settings ? settings : $.ajaxSettings ).port; if ( mode === "abort" ) { if ( pendingRequests[port] ) { pendingRequests[port].abort(); } pendingRequests[port] = ajax.apply(this, arguments); return pendingRequests[port]; } return ajax.apply(this, arguments); }; }
그래서 그냥 단지 당신이 아약스 요청을 할 때 중단 매개 변수 모드를 설정할 필요가있다.
참고 : HTTPS : //cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.14.0/jquery.validate.js
-
6.jQuery를 : 영감 - 시작 지점으로 사용합니다. 나는 이런 식으로 해결 : (이것은 단지 마지막 인스턴스를 중단, 완벽한 해결책이 아니다 및 WIP 코드)
jQuery를 : 영감 - 시작 지점으로 사용합니다. 나는 이런 식으로 해결 : (이것은 단지 마지막 인스턴스를 중단, 완벽한 해결책이 아니다 및 WIP 코드)
var singleAjax = function singleAjax_constructor(url, params) { // remember last jQuery's get request if (this.lastInstance) { this.lastInstance.abort(); // triggers .always() and .fail() this.lastInstance = false; } // how to use Deferred : http://api.jquery.com/category/deferred-object/ var $def = new $.Deferred(); // pass the deferrer's request handlers into the get response handlers this.lastInstance = $.get(url, params) .fail($def.reject) // triggers .always() and .fail() .success($def.resolve); // triggers .always() and .done() // return the deferrer's "control object", the promise object return $def.promise(); } // initiate first call singleAjax('/ajax.php', {a: 1, b: 2}) .always(function(a,b,c) {console && console.log(a,b,c);}); // second call kills first one singleAjax('/ajax.php', {a: 1, b: 2}) .always(function(a,b,c) {console && console.log(a,b,c);}); // here you might use .always() .fail() .success() etc.
-
7.당신의 API를 호출하는 기능을 만듭니다. 이 함수 내에서 우리는 요청 callApiRequest = $ 갔지를 (정의 ... -.이 변수의 정의는, 요청이 즉시이라고하지만 지금 우리가 변수로 정의 된 요청이 요청이 호출되기 전에 비록 우리 ! 우리 변수 대해서 typeof (callApiRequest) 정의되어있는 경우 = '정의되지 않은'하고 suggestCategoryRequest.state을 () ==중인 경우도 '보류'확인 - 모두) (우리 .abort, 해당하는 경우 성공 콜백을 방지 할 수 요청 실행에서.
당신의 API를 호출하는 기능을 만듭니다. 이 함수 내에서 우리는 요청 callApiRequest = $ 갔지를 (정의 ... -.이 변수의 정의는, 요청이 즉시이라고하지만 지금 우리가 변수로 정의 된 요청이 요청이 호출되기 전에 비록 우리 ! 우리 변수 대해서 typeof (callApiRequest) 정의되어있는 경우 = '정의되지 않은'하고 suggestCategoryRequest.state을 () ==중인 경우도 '보류'확인 - 모두) (우리 .abort, 해당하는 경우 성공 콜백을 방지 할 수 요청 실행에서.
// We need to wrap the call in a function callApi = function () { //check if request is defined, and status pending if (typeof(callApiRequest) != 'undefined' && suggestCategoryRequest.state() == 'pending') { //abort request callApiRequest.abort() } //define and make request callApiRequest = $.get("https://example.com", function (data) { data = JSON.parse(data); //optional (for JSON data format) //success callback }); }
서버 / API는 (? API는 이미 몇 가지 코드를 실행하면 무엇을) 요청을 중단 지원하지 않을 수 있습니다,하지만 자바 스크립트 콜백이 발생하지 않습니다. 예를 들어 당신은 같은 해시 태그를 입력으로 사용자 입력 제안을 제공하는 경우에 유용합니다.
당신은 추가 오류 콜백의 정의를 추가하여이 기능을 확장 할 수 있습니다 - 요청이 중단 된 경우 어떻게해야하는지.
이 코드에 대한 일반적인 사용 사례는 텍스트 입력 될 키를 누를 때 이벤트에 화재가. 당신은 당신이) (.abort 취소 할 것을 요청 (의 일부)를 전송 방지하기 위해 제한 시간을 사용할 수 있습니다.
-
8.또한 readyState가 0 확인해야하기 때문에이 객체에 0) (이 기능 세트 readyState의를 xhr.abort를 사용하여 검사가 항상 참이 될 것입니다 경우 때! - readyState가 = 4
또한 readyState가 0 확인해야하기 때문에이 객체에 0) (이 기능 세트 readyState의를 xhr.abort를 사용하여 검사가 항상 참이 될 것입니다 경우 때! - readyState가 = 4
$(document).ready( var xhr; var fn = function(){ if(xhr && xhr.readyState != 4 && xhr.readyState != 0){ xhr.abort(); } xhr = $.ajax({ url: 'ajax/progress.ftl', success: function(data) { //do something } }); }; var interval = setInterval(fn, 500); );
from https://stackoverflow.com/questions/4551175/how-to-cancel-abort-jquery-ajax-request by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 내가 값을 설정할 때 왜 JQuery와 변경 이벤트가 트리거하지 않는 발을 사용하여 선택 ()? (0) | 2020.10.02 |
---|---|
[JQUERY] 자바 스크립트 (jQuery를 또는 바닐라)와 / 선택을 취소 확인란을 선택? (0) | 2020.10.02 |
[JQUERY] 어떻게 구글 크롬에서 그리스 몽키 스크립트에서 jQuery를 사용할 수 있습니까? (0) | 2020.10.02 |
[JQUERY] 때 CSS3 전환 완료 콜백 (0) | 2020.10.02 |
[JQUERY] 당신은 어디에서 jQuery 라이브러리를 포함합니까? 구글 JSAPI? CDN? (0) | 2020.10.02 |