source

jqXHR.responseText가 JSON 개체 대신 문자열을 반환하는 이유는 무엇입니까?

manysource 2023. 3. 31. 22:30

jqXHR.responseText가 JSON 개체 대신 문자열을 반환하는 이유는 무엇입니까?

data Type이 "json"으로 설정된 $.ajax() 요청이 있습니다.서버가 올바른 MIME 유형인 "application/json"을 사용하여 JSON을 반환하고 있습니다.그러나 jqXHR 객체의 responseText는 항상 문자열입니다.내가 뭘 잘못하고 있지?원래 이렇게 하는 거야?

통화 방법은 다음과 같습니다.

var options = { 
    dataType:'json',
    type: 'GET',
    url: "http://example.com/api/"
};

var key = "PassToCallback";

var jqXHRObject =  $.ajax(options).then(
    function(data, textStatus, jqXHR, key) {
        this.success(data, textStatus, jqXHR, key);
    },
    function(jqXHR, textStatus, errorThrown) { 
        this.error(jqXHR, textStatus, errorThrown);
    }
);

console.log(jqXHRObject.getResponseHeader("content-type")); // application/json
console.log(typeof jqXHRObject.responseText); // string

그래서 제가 해야 되는 게$.parseJSON(jqXHRObject.responseText)실제 물체를 얻기 위해.문서에 따르면 $.ajax()는 responseText를 자동으로 변환해야 하므로 이 작업은 불필요할 것으로 보입니다.감사합니다!

저도 같은 문제가 있었어요.예외에서 정규화된 문자열이므로 문자열을 반환합니다.예: Symfony2 프로젝트에서 json으로 시리얼라이제이션하는 커널 리스너를 사용하고 있습니다.이는 적절한 REST 헤더에 적합합니다.

어쨌든, 해석해 주세요.이걸로 충분합니다.

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');
        var responseText = jQuery.parseJSON(jqXHR.responseText);
        console.log(responseText);
    }
});

해라

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');            
        console.log(jqXHR.responseJSON);
    }
});

당신은 $.ajax를 문서에 기재되지 않은 방법으로 사용하고 있습니다.사용.jsondataType은 데이터가 전달된 것을 의미합니다.success콜백이 해석됩니다.다음과 같이 사용합니다.

$.ajax({
  dataType:'json',
  type: 'GET',
  url: "http://example.com/api/"
  success: function(data, textStatus, jqXHR) {
    // `data` contains parsed JSON
  },
  error: function(jqXHR, textStatus, errorThrown) {
     // Handle any errors
  }
});

문서에는 responseText가 그 이름이 의미하는 것 이외에는 아무것도 표시되지 않습니다.텍스트.

그냥 .getJSON을 사용하지 않는 거죠?그렇게 하면 당신이 작성한 코드의 절반이 제거되고 응답이 JSON으로 변환됩니다.윈/윈

순서 1: jqX 문자열 지정인사

var errorString = JSON.stringify(jqXHR.responseText);

2단계: 해당 문자열을 Jquery Object로 변경

var $errorObj = $(errorString);

순서 3: 응답 텍스트 중 원하는 부분을 찾아 가져옵니다.

var errorMessage = $errorObj.find('p').eq(1).text(); 

/* Here Im finding `Message:` thrown by the server, which is inside <p> tag */

바로 그거야.

$.ajax( /* ... */ ).fail( function(jqXHR, textStatus, errorThrown) {

     var errorString = JSON.stringify(jqXHR.responseText);
     var $errorObj = $(errorString);
     var errorMessage = $errorObj.find('p').eq(1).text();

     alert(errorMessage);

    } );

언급URL : https://stackoverflow.com/questions/5825465/why-is-jqxhr-responsetext-returning-a-string-instead-of-a-json-object