$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
때로는 success
기능이 제대로 작동하지만 때로는 그렇지 않습니다.
이 아약스 요청에 대한 시간 초과를 어떻게 설정합니까? 예를 들어 시간이 초과되면 3 초 후에 오류가 표시됩니다.
문제는 ajax 요청이 완료 될 때까지 블록을 정지한다는 것입니다. 서버가 잠시 다운되면 종료되지 않습니다.
답변
$.ajax
설명서를 읽으십시오 .이 주제는 다루어집니다.
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
error: function(jqXHR, textStatus, errorThrown)
옵션 의 textStatus 매개 변수에 액세스하여 어떤 유형의 오류가 발생했는지 확인할 수 있습니다 . 옵션은 “timeout”, “error”, “abort”및 “parsererror”입니다.
답변
다음은 jQuery의 이전 및 새로운 패러다임에서 시간 초과 설정 및 감지를 보여주는 몇 가지 예입니다.
jQuery 1.8 이상으로 약속
Promise.resolve(
$.ajax({
url: '/getData',
timeout:3000 //3 second timeout
})
).then(function(){
//do something
}).catch(function(e) {
if(e.statusText == 'timeout')
{
alert('Native Promise: Failed from timeout');
//do something. Try again perhaps?
}
});
jQuery 1.8 이상
$.ajax({
url: '/getData',
timeout:3000 //3 second timeout
}).done(function(){
//do something
}).fail(function(jqXHR, textStatus){
if(textStatus === 'timeout')
{
alert('Failed from timeout');
//do something. Try again perhaps?
}
});
jQuery <= 1.7.2
$.ajax({
url: '/getData',
error: function(jqXHR, textStatus){
if(textStatus === 'timeout')
{
alert('Failed from timeout');
//do something. Try again perhaps?
}
},
success: function(){
//do something
},
timeout:3000 //3 second timeout
});
것을 알 수 textStatus의 PARAM (또는 jqXHR.statusText가 ) 오류가 무엇인지 알려줍니다. 실패가 시간 초과로 인해 발생한 것을 알고 싶은 경우에 유용 할 수 있습니다.
오류 (jqXHR, textStatus, errorThrown)
요청이 실패하면 호출 할 함수입니다. 이 함수는 jqXHR (jQuery 1.4.x에서 XMLHttpRequest) 오브젝트, 발생한 오류 유형을 설명하는 문자열 및 발생하는 경우 선택적 예외 오브젝트를 수신합니다. 두 번째 인수 (널 제외)에 가능한 값은 “timeout”, “error”, “abort”및 “parsererror”입니다. HTTP 오류가 발생하면 errorThrown은 “Not Found”또는 “Internal Server Error”와 같은 HTTP 상태의 텍스트 부분을 수신합니다. jQuery 1.5부터는 오류 설정에 여러 함수를 사용할 수 있습니다. 각 기능이 차례로 호출됩니다. 참고 :이 핸들러는 도메인 간 스크립트 및 JSONP 요청에 대해 호출되지 않습니다.
답변
다음 timeout
과 같이 ajax 옵션에서 설정을 사용할 수 있습니다 .
$.ajax({
url: "test.html",
timeout: 3000,
error: function(){
//do something
},
success: function(){
//do something
}
});
http://api.jquery.com/jQuery.ajax/ 에서 아약스 옵션에 대한 모든 내용을 읽으십시오.
시간 초과가 발생하면 error
핸들러가 아닌 핸들러가 트리거됩니다. success
🙂
답변
모든 기능을 갖춘 .ajax
jQuery 함수를 사용하십시오 . 예 를 보려면 https://stackoverflow.com/a/3543713/1689451 과 비교 하십시오 .
테스트하지 않고 참조 된 SO 질문과 코드를 병합하면됩니다.
target = $(this).attr('data-target');
$.ajax({
url: $(this).attr('href'),
type: "GET",
timeout: 2000,
success: function(response) { $(target).modal({
show: true
}); },
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert(t);
}
}
});