Ajax 쿼리 게시 오류를 어떻게 포착합니까?


209

Ajax 요청이 실패하면 오류를 포착하고 적절한 메시지를 표시하고 싶습니다.

내 코드는 다음과 같지만 실패한 Ajax 요청을 잡을 수 없었습니다.

function getAjaxData(id)
{
     $.post("status.ajax.php", {deviceId : id}, function(data){

        var tab1;

        if (data.length>0) {
            tab1 = data;
        }
        else {
            tab1 = "Error in Ajax";
        }

        return tab1;
    });
}

Ajax 요청이 실패하면 "Ajax 오류"가 실행되지 않습니다.

Ajax 오류를 처리하고 실패 할 경우 적절한 메시지를 표시하려면 어떻게해야합니까?

답변:


304

jQuery 1.5부터 지연된 객체 메커니즘을 사용할 수 있습니다.

$.post('some.php', {name: 'John'})
    .done(function(msg){  })
    .fail(function(xhr, status, error) {
        // error handling
    });

다른 방법은 다음을 사용하는 것입니다 .ajax.

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
  success: function(msg){
        alert( "Data Saved: " + msg );
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
     alert("some error");
  }
});

14
@Yuck $ .post는 지연된 객체를 사용하여 오류 콜백을 수락 할 수 있습니다. 예를 들어 아래의 답변을 살펴보십시오.
Michael Venable

2
또한 $.ajax더 읽기 쉬운 방법 은에 해시를 사용하는 것 data입니다. 예를 들어 :{ name : 'John', location: 'Boston' }
briangonzalez

3
위의 성공 및 오류 콜백은 jQuery 1.8에서 더 이상 사용되지 않습니다. api.jquery.com/jQuery.post
Baldy

@MichaelVeneble 난 당신이 사용할 수 있다고 생각$.post().error()
clintgh

288

jQuery 1.5는 이것을 잘 처리하는 지연된 객체를 추가했습니다. 통화 $.post후 원하는 핸들러를 호출 하고 연결하기 만하면 됩니다. 지연된 객체를 사용하면 여러 성공 및 오류 처리기를 연결할 수 있습니다.

예:

$.post('status.ajax.php', {deviceId: id})
    .done( function(msg) { ... } )
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    });

jQuery를 1.8 이전에, 함수가 done호출 된 success하고 fail불렀다 error.


3
+1 매우 훌륭하지만 여전히 문법에 열중하지는 않습니다. 향후 릴리스에서 통합되기를 바랍니다.
Yuck

25
이것이 정답입니다. 현재 받아 들여지는 대답은 "다른 방법을 사용하는 것"입니다. 이 답변에는 "방법이 작동하는 방법이 있습니다"라고 나와 있습니다. 후자는 일반적으로 SO에서 선호됩니다. 실제로, 이것은 $ .post 문서에 포함되어야합니다 !!!
Mark E. Haase


덧붙여서 responseJSON아약스 타입의 경우에 매우 편리한 프로퍼티 도 있습니다 json.
ivkremer

91
$.ajax({
  type: 'POST',
  url: 'status.ajax.php',
  data: {
     deviceId: id
  },
  success: function(data){
     // your code from above
  },
  error: function(xhr, textStatus, error){
      console.log(xhr.statusText);
      console.log(textStatus);
      console.log(error);
  }
});

15
$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });

5
여기에 조금 더 설명을 추가하면 미래 독자에게 도움이 될 것입니다.
Eric Brown

13

간단한 방법은 ajaxError 를 구현하는 것입니다 .

Ajax 요청이 오류와 함께 완료 될 때마다 jQuery는 ajaxError 이벤트를 트리거합니다. .ajaxError () 메소드로 등록 된 모든 핸들러가 현재 실행됩니다.

예를 들면 다음과 같습니다.

$('.log').ajaxError(function() {
  $(this).text('Triggered ajaxError handler.');
});

ajaxError 문서를 읽는 것이 좋습니다 . 위에서 설명한 간단한 유스 케이스보다 더 많은 작업을 수행합니다. 주로 콜백은 많은 매개 변수를 허용합니다.

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

1
+
1-

jQuery 1.8부터 .ajaxError () 메소드는 문서에만 첨부되어야합니다.
난키

0

responseText를 기록해야합니다.

$.ajax({
    type: 'POST',
    url: 'status.ajax.php',
    data: {
    deviceId: id
  }
})
.done(
 function (data) {
  //your code
 }
)
.fail(function (data) {
      console.log( "Ajax failed: " + data['responseText'] );
})

0

.onerror 핸들러를 ajax 객체에 연결합니다. 바닐라가 플랫폼 간 작동 할 때 사람들이 응답을 위해 JQuery를 게시해야한다고 주장하는 이유는 무엇입니까?

빠른 예 :

ajax = new XMLHttpRequest();
ajax.open( "POST", "/url/to/handler.php", true );
ajax.onerror = function(){
    alert("Oops! Something went wrong...");
}
ajax.send(someWebFormToken );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.