복붙노트

[SPRING] HTTP 응답이 아닌 서버 응답을 기반으로 jquery.ajax () 오류 콜백을 트리거하는 방법은 무엇입니까?

SPRING

HTTP 응답이 아닌 서버 응답을 기반으로 jquery.ajax () 오류 콜백을 트리거하는 방법은 무엇입니까?

jquery ajax 함수를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

$.ajax({

  url: url,
  type: 'GET',
  async: true,
  dataType: 'json',
  data: data,

 success: function(data) {

     //Handle server response here

  },

 error: function(xhr, status, error){

    //Handle failure here

 }

});

위의 코드를 기반으로 묻는 두 가지 질문이 있습니다.

나는 클라이언트가 서버의 응답을 얻었다면 문자열 값 서버가 어떤 반응을 보일지라도 jquery.ajax () success 콜백이 트리거 될 것이라고 생각한다.

서버가 특별히 {message : '오류가 있습니다'}와 같은 문자열 값을 가진 JSON 객체를 반환하는지 묻고 싶습니다. 서버가 대신이 응답을 jquery.ajax () 오류 콜백에서 처리 할 수 ​​있도록 할 수 있습니까? 성공 콜백?

해결법

  1. ==============================

    1.오류 콜백은 서버의 응답이 예상 한 것과 같지 않을 때 실행됩니다. 예를 들어, 다음과 같은 경우에 해당합니다.

    오류 콜백은 서버의 응답이 예상 한 것과 같지 않을 때 실행됩니다. 예를 들어, 다음과 같은 경우에 해당합니다.

    상황에 따라 데이터가 정확합니다 (JSON 메시지). 수신 된 데이터 값을 기반으로 오류 콜백을 수동으로 트리거하려면 매우 간단하게 수행 할 수 있습니다. 오류에 대한 익명 콜백을 명명 된 함수로 변경하십시오.

    function handleError(xhr, status, error){
    
        //Handle failure here
    
     }
    
    $.ajax({
    
      url: url,
      type: 'GET',
      async: true,
      dataType: 'json',
      data: data,
    
     success: function(data) {
         if (whatever) {
             handleError(xhr, status, ''); // manually trigger callback
         }
         //Handle server response here
    
      },
    
     error: handleError
    });
    
  2. ==============================

    2.서버가 JSON을 전송한다고 가정하고 요청이 성공한 경우 다음과 같은 정보를 얻습니다.

    서버가 JSON을 전송한다고 가정하고 요청이 성공한 경우 다음과 같은 정보를 얻습니다.

    {
        success: true,
        data: {
            name: 'Foo'
        }
    }
    

    ... 실패한 경우 :

    {
        success: false,
        error: 'Something bad happened.'
    }
    

    그런 다음 $ .Deferred를 사용하여 응답을 간단하게 필터링합니다.

    $.get('http://localhost/api').then(function(res) {
        var filter = $.Deferred();
    
        if (res.success) {
            filter.resolve(res.data);
        } else {
            filter.reject(res.error);
        }
    
        return filter.promise();
    }).done(function(data) {
        console.log('Name:',  data.name); // Outputs: Foo
    }).fail(function(error) {
        console.log('Error:', error); // Outputs: Something bad happened.
    })
    
  3. ==============================

    3.오류 콜백은 Ajax 왕복이 서버 논리를 기반으로하는 것이 아니라 성공적으로 완료 될 수없는 경우를위한 것입니다. 성공 콜백 내에서 성공한 응답으로 간주되는 것을 확인하는 것은 귀하의 책임입니다. 즉, 메시지 = "오류가 있음"을 확인하는 단일 IF 조건을 추가합니다. 거기에 오류 논리를 포함 시키십시오. 그렇지 않으면 성공 논리를 수행하십시오.

    오류 콜백은 Ajax 왕복이 서버 논리를 기반으로하는 것이 아니라 성공적으로 완료 될 수없는 경우를위한 것입니다. 성공 콜백 내에서 성공한 응답으로 간주되는 것을 확인하는 것은 귀하의 책임입니다. 즉, 메시지 = "오류가 있음"을 확인하는 단일 IF 조건을 추가합니다. 거기에 오류 논리를 포함 시키십시오. 그렇지 않으면 성공 논리를 수행하십시오.

    오류가있을 때 서버에서 404 헤더를 반환하도록 요청하면 오류 콜백에 의해 처리됩니다. 이 방법의 문제점은 실제 오류가있는 경우 숨기고 다른 데이터를 전달할 수 없다는 것입니다.

  4. ==============================

    4.가장 간단한 일은 다음과 같이 재구성하는 것입니다.

    가장 간단한 일은 다음과 같이 재구성하는 것입니다.

    function handleAjaxError function(xhr, status, error) {
        //Handle failure here
    }
    
    $.ajax({
      url: url,
      type: 'GET',
      async: true,
      dataType: 'json',
      data: data,
    
      success: function(data) {
    
         //Handle server response here
        if (data.message == 'There is an error')
        {
            handleAjaxError();
            return;
        }
    
        //... all is good....
    
      },
      error: handleAjaxError
    });
    
  5. ==============================

    5.이 작업을 수행하는 한 가지 쉬운 방법은 콜백에 jQuery always () 함수를 사용하는 것입니다. 그런 다음 수동으로 오류를 만들려면 Duck Typing을 활용하십시오!

    이 작업을 수행하는 한 가지 쉬운 방법은 콜백에 jQuery always () 함수를 사용하는 것입니다. 그런 다음 수동으로 오류를 만들려면 Duck Typing을 활용하십시오!

    예 :

    $.get(url, {"data": data}).always(function(result)
    {
        if (typeof result.status !== "undefined" && result.status !== 200) // Status code 200 represents Success/OK
        {
            //handle error
            error = "Your error was " + result.status + " " + result.statusText;
        }
        else
        {
            //success
        }
    });
    

    오류 섹션은 404 찾을 수 없음과 같은 자연적인 헤더 오류가있는 경우 항상 실행됩니다. 수동으로 오류를 반환하려는 경우 일반적으로 오류와 함께 전달 된 XHR 객체를 에뮬레이트 할 수 있습니다 (예 : PHP).

    public function ServerSideAjaxResponse($data)
    {
        if (!$data)
        {
            $response["status"] = 1001; //Make up your own error codes! Yippee! Fun!
            $response["statusText"] = "Error! You forgot to send the data!";
            echo json_encode($return);
            return;
        }
    }
    
  6. from https://stackoverflow.com/questions/6265814/how-to-trigger-jquery-ajax-error-callback-based-on-server-response-not-http-5 by cc-by-sa and MIT license