새 요청시 이전 ajax 요청 중단
입력 변경시 ajax 호출을 실행하는 함수가 있습니다.
그러나 이전 ajax 호출이 완료되기 전에 함수가 다시 실행될 가능성이 있습니다.
내 질문은 새 ajax 호출을 시작하기 전에 이전 ajax 호출을 어떻게 중단합니까? 전역 변수를 사용하지 않고. ( 여기 에서 유사한 질문에 대한 답변 참조 )
내 현재 코드의 jsfiddle :
자바 스크립트 :
var filterCandidates = function(form){
//Previous request needs to be aborted.
var request = $.ajax({
type: 'POST',
url: '/echo/json/',
data: {
json: JSON.stringify({
count: 1
})
},
success: function(data){
if(typeof data !== 'undefined'){
jQuery('.count').text(data.count)
console.log(data.count);
}
}
});
};
if(jQuery('#search').length > 0){
var form = jQuery('#search');
jQuery(form).find(':input').change(function() {
filterCandidates(form);
});
filterCandidates(form);
}
HTML :
<form id="search" name="search">
<input name="test" type="text" />
<input name="testtwo" type="text" />
</form>
<span class="count"></span>
var currentRequest = null;
currentRequest = jQuery.ajax({
type: 'POST',
data: 'value=' + text,
url: 'AJAX_URL',
beforeSend : function() {
if(currentRequest != null) {
currentRequest.abort();
}
},
success: function(data) {
// Success
},
error:function(e){
// Error
}
});
var filterCandidates = function(form){
//Previous request needs to be aborted.
var request = $.ajax({
type: 'POST',
url: '/echo/json/',
data: {
json: JSON.stringify({
count: 1
})
},
success: function(data){
if(typeof data !== 'undefined'){
jQuery('.count').text(data.count)
console.log(data.count);
}
}
});
return request;
};
var ajax = filterCandidates(form);
변수에 저장 한 다음 두 번째 보내기 전에 확인하고 필요한 경우 readyState
호출 abort()
하십시오.
받아 들여지는 답변의 변형과 질문에 대한 의견에서 채택-이것은 내 응용 프로그램에 적합했습니다 ....
jQuery의 $ .post () .... 사용
var request = null;
function myAjaxFunction(){
$.ajaxSetup({cache: false}); // assures the cache is empty
if (request != null) {
request.abort();
request = null;
}
request = $.post('myAjaxURL', myForm.serialize(), function (data) {
// do stuff here with the returned data....
console.log("returned data is ", data);
});
}
Call myAjaxFunction() as many times as you like and it kills all except the last one (my application has a 'date selector' on it and changes price depending on the days selected - when someone clicks them fast without the above code, it is a coin toss as to if they will get the right price or not. With it, 100% correct!)
Try this code
var lastCallFired=false;
var filterCandidates = function(form){
if(!lastCallFired){
var request = $.ajax({
type: 'POST',
url: '/echo/json/',
data: {
json: JSON.stringify({
count: 1
})
},
success: function(data){
if(typeof data !== 'undefined'){
jQuery('.count').text(data.count)
console.log(data.count);
}
}
});
setInterval(checkStatus, 20);
}
};
if(jQuery('#search').length > 0){
var form = jQuery('#search');
jQuery(form).find(':input').change(function() {
filterCandidates(form);
});
filterCandidates(form);
}
var checkStatus = function(){
if(request && request.readyState != 4){
request.abort();
}
else{
lastCallFired=true;
}
};
if(typeof window.ajaxRequestSingle !== 'undefined'){
window.ajaxRequestSingle.abort();
}
window.ajaxRequestSingle = $.ajax({
url: url,
method: 'get',
dataType: 'json',
data: { json: 1 },
success: function (data) {
//...
},
complete: function () {
delete window.ajaxRequestSingle;
}
});
참고URL : https://stackoverflow.com/questions/19244341/abort-previous-ajax-request-on-new-request
'IT박스' 카테고리의 다른 글
T-SQL의 PIVOT 함수 이해 (0) | 2020.11.18 |
---|---|
자바 스크립트에서 ctrl + z 키 조합 캡처 (0) | 2020.11.18 |
기기에서 iOS 앱을 제거한 후 iOS에서 identifierForVendor를 보존하는 방법은 무엇입니까? (0) | 2020.11.18 |
Vim 파일의 다른 곳에서 레지스터 또는 행 범위의 내용으로 대체 (0) | 2020.11.18 |
HTML 이미지 맵과 함께 JQuery 호버 사용 (0) | 2020.11.18 |