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


230

다음 코드에서 내가하려는 것은 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'응답 헤더를 찾을 수 없습니다. 나는 '완료'의 마지막 줄에 중단 점을 설정했습니다.

고맙습니다.



나는 이것이 오래되었다는 것을 알고 있지만 그것을 해결했다고 생각합니다 (XHR.responseURL) : stackoverflow.com/a/39416846/4946681
Nate

답변:


221

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

2
jsFiddle에서 작동하는 것 같습니다. 그와 jQuery 문서를 기반으로 xhr.status는 내가 원하는 것을해야합니다. 그러나 원래 코드 (txt_status가 jqxhr.status로 대체 됨)에서 동일하게 시도하면 jqxhr.status가 0으로 계속 표시됩니다. 스크린 샷은 다음과 같습니다. twitpic.com/4alsqj
Mahesh

10
문제는 웹 서버가 아니라 파일 시스템에서 로컬로 실행되고 있다는 것입니다. 로컬 웹 서버를 시작한 경우 이것이 올바르게 작동한다고 생각합니다. pearweb.com/javascript/XMLHttpRequest.html developer.mozilla.org/En/Using_XMLHttpRequest "여기에 주목해야 할 것은 결과 상태는 200이 아닌 성공을 위해 0과 비교됩니다. 이는 파일 및 ftp 체계가 HTTP 결과 코드를 사용하지 않기 때문입니다. "
Adam Ayres

이것은 대단하다. 특히 백엔드가 상태 코드를 보내도록 할 수있을 때.
thatmiddleway 2016 년

응답이 302와 같은 경로 재 지정 상태 인 경우
회계사

52

비슷한 솔루션이 오래된 스레드 검색을 통해 자신을 와서 사용되도록 허용 대답을 발견 .complete()의 방법을 jquery ajax. jquery 웹 사이트 의 공지 사항을 여기 에 인용 하십시오.

jqXHR.success (), jqXHR.error () 및 jqXHR.complete은 () 콜백되어 사용되지 않는 jQuery를 1.8로. 최종 제거를 위해 코드를 준비하려면 jqXHR.done (), jqXHR.fail () 및 jqXHR.always ()를 대신 사용하십시오.

status code아약스 응답 을 알기 위해 다음 코드를 사용할 수 있습니다.

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

.done()와 비슷하게 작동.fail()


2
이것은 "정의되지 않음"을 반환합니다
Pedro Joaquín

43

$ .ajax 함수에 전달 된 매개 변수 객체의 statusCode 속성을 사용하는 것이 관용적 인 jQuery 일 것입니다.

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

그러나 Livingston Samuel이 말했듯이 자바 스크립트에서 301 상태 코드를 잡을 수는 없습니다.


41

XHR 요청이 리디렉션 응답 (HTTP 상태 301, 302, 303, 307)을 XMLHttpRequest 반환하면 자동으로 리디렉션 된 URL을 따르고 해당 URL의 상태 코드를 반환합니다 .

statusxhr 객체 의 속성을 통해 리디렉션되지 않는 상태 코드 (200, 400, 500 등)를 얻을 수 있습니다 .

당신은의 응답 헤더에서 재 위치 얻을 수 있도록 301, 302, 303또는 307요청을.

브라우저에서 처리하도록하는 대신 리디렉션을 처리 할 수있는 방식으로 응답하도록 서버 논리를 변경해야 할 수도 있습니다. 예를 구현 .


24

respone 내용을 확인하고 console.log 만 있으면 whitch 속성에 상태 코드가 있음을 알 수 있습니다. JSON을 이해하지 못하는 경우 비디오를 참조하십시오 : https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

자바 스크립트에 익숙해 지도록하는 기본적인 지식을 설명합니다.

짧은 버전의 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

1
전체 기능 매개 변수와 함께 완료, 실패 및 항상 사용 방법에 대한 전체 코드를 제공해 주셔서 감사합니다.
IvanD

4

jqxhr은 json 객체입니다.

완전한 리턴 :
jqXHR (jQuery 1.4.x, XMLHTTPRequest) 오브젝트 및 요청 상태를 분류하는 문자열 ( "성공", "수정되지 않음", "오류", "시간 종료", "중단"또는 "파서 오류") .

참조 : jQuery ajax

그래서 당신은 할 것입니다 :

jqxhr.status 상태를 얻기 위해


2

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);
  }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.