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

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 오류를 처리하고 실패 할 경우 적절한 메시지를 표시하려면 어떻게해야합니까?



답변

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");
  }
});


답변

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.


답변

$.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);
  }
});


답변

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


답변

간단한 방법은 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.');
  }
});


답변

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'] );
})


답변

.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 );