programing

jQuery.ajax에서 응답 상태 코드를 얻는 방법

telecom 2023. 3. 31. 21:35
반응형

jQuery.ajax에서 응답 상태 코드를 얻는 방법

다음 코드에서는 jQuery.ajax 콜에서HTTP 응답 코드를 취득하려고 합니다.그런 다음 코드가 301(영구적으로 이동됨)인 경우 'Location' 응답 헤더를 표시합니다.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>jQuery 301 Trial</title>
  <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>

  <script type="text/javascript">
  function get_resp_status(url) {
    $.ajax({
      url: url,
      complete: function (jqxhr, txt_status) {
        console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
        // if (response code is 301) {
        console.log ("Location: " + jqxhr.getResponseHeader("Location"));
        // }
      }
    });
  }
  </script>
  <script type="text/javascript">
  $(document).ready(function(){
    $('a').mouseenter(
      function () {
        get_resp_status(this.href);
      },
      function () {
      }
    );
  });
  </script>
</head>
<body>
  <a href="http://ow.ly/4etPl">Test 301 redirect</a>
  <a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>

제가 어디가 잘못됐는지 누가 좀 지적해주시겠어요?Firebug에서 'jqxhr' 개체를 확인해도 상태 코드와 'Location' 응답 헤더를 찾을 수 없습니다.나는 complete의 마지막 줄에 중단점을 설정했다.

대단히 감사합니다.

jqXhr 객체에 상태 필드가 표시되어 있습니다.이 필드는 다음과 같이 동작합니다.

http://jsfiddle.net/magicaj/55HQq/3/

$.ajax({
    //...        
    success: function(data, textStatus, xhr) {
        console.log(xhr.status);
    },
    complete: function(xhr, textStatus) {
        console.log(xhr.status);
    } 
});

비슷한 솔루션을 직접 찾다가 우연히 이 오래된 스레드를 발견했고, 사용 중인 것으로 인정된 답을 발견했다..complete()의 방법jquery ajaxjquery 웹사이트의 공지사항을 인용합니다.

jqXHR.success(), jqXHR.error() jqXHR.complete() 콜백은 jQuery 1.8에서 권장되지 않습니다.최종 삭제에 대비하여 코드를 준비하려면 jqXHR.done(), jqXHR.fail()jqXHR.always()를 사용합니다.

를 알기 위해서status codeajax 응답의 경우 다음 코드를 사용할 수 있습니다.

$.ajax( url [, settings ] )
.always(function (jqXHR) {
    console.log(jqXHR.status);
});

같은 방법으로 동작합니다..done()그리고..fail()

$.ajax 함수에 전달된 파라미터 객체의 statusCode 속성을 사용하는 것이 보다 관용적인 jQuery일 수 있습니다.

$.ajax({
  statusCode: {
    500: function(xhr) {
      if(window.console) console.log(xhr.responseText);
    }
  }
});

그러나 Livingston Samuel이 말했듯이 javascript에서 301개의 상태 코드를 잡는 것은 불가능합니다.

XHR 요구가 리다이렉트 응답(HTTP Status 301, 302, 303, 307)을 반환하면XMLHttpRequest 는 자동으로 리다이렉트된 URL에 따라 해당 URL의 상태 코드를 반환합니다.

리다이렉트하지 않는 상태 코드(200, 400, 500 등)는,statusxhr 객체의 속성.

따라서 리다이렉트된 위치를 의 응답 헤더에서 가져올 수 없습니다.301,302,303또는307부탁한다.

브라우저가 리다이렉트를 처리하도록 하지 않고 서버 로직을 변경하여 리다이렉트를 처리할 수 있도록 해야 할 수도 있습니다.구현 예시.

console.log만 하면 응답 내용을 확인할 수 있습니다.속성에 상태 코드가 표시됩니다.jsons를 모르는 경우는, 다음의 비디오를 참조해 주세요.https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

javascript를 보다 편안하게 사용할 수 있는 매우 기본적인 지식을 설명합니다.

Ajax 요청의 더 짧은 버전으로 수행할 수 있습니다. 위의 코드를 참조하십시오.

$.get("example.url.com", function(data) {
                console.log(data);
            }).done(function() {
               // TO DO ON DONE
            }).fail(function(data, textStatus, xhr) {
                 //This shows status code eg. 403
                 console.log("error", data.status);
                 //This shows status message eg. Forbidden
                 console.log("STATUS: "+xhr);
            }).always(function() {
                 //TO-DO after fail/done request.
                 console.log("ended");
            });

콘솔 출력 예:

error 403 
STATUS: Forbidden 
ended

nB: jQuery 3.4.1 사용

$.ajax({
  url: URL,
  success: function(data, textStatus, jqXHR){
    console.log(textStatus + ": " + jqXHR.status);
    // do something with data
  },
  error: function(jqXHR, textStatus, errorThrown){
    console.log(textStatus + ": " + jqXHR.status + " " + errorThrown);
  }
});

jqxhr은 json 객체입니다.

품품: :
1.의 경우) 상태를 하는 문자열("success " " " "jQHR(jQuery 1.4X, XMLHTTT)입니다.

참조: jQuery ajax

다음과 같이 합니다.

jqxhr.status

언급URL : https://stackoverflow.com/questions/5344145/how-to-get-response-status-code-from-jquery-ajax

반응형