source

어떻게 하면 jQuery가 유효한 json으로 표현되는 내 오류 응답을 구문 분석할 수 있습니까?

ittop 2023. 8. 15. 11:45
반응형

어떻게 하면 jQuery가 유효한 json으로 표현되는 내 오류 응답을 구문 분석할 수 있습니까?

내 코드는 다음과 같습니다.

      $.ajax({
        url: "/api/invoice/" + newInvoice._id,
        type: 'PUT',
        data: JSON.stringify(newInvoice),
        dataType: 'json',
        contentType: "application/json; charset=utf-8"
      })
        .success(function () {
          $('#statusLine').text('Successfully submitted invoice {0}. Click here to dismiss.'.format(newInvoice._id));
        })
        .error(function (err) {
          alert(err);
        });

요청 내용:

PUT http://localhost:8000/api/invoice/16211 HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 770
Origin: http://localhost:8000
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:8000/invoice.html?id=16211
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"items":[{"id":...

요청 본문은 실제로 유효한 json입니다. 간략화를 위해 잘라냈습니다.

응답:

HTTP/1.1 409 Conflict
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 1386
ETag: 250542419
Connection: keep-alive

{
  "msg": "Cannot update the invoice #16211, because it has already been updated by someone else.",
  "invoice": {
    "items": [
      {...

다시 말하지만, 응답은 완전하게 유효한 json이며, 간략화를 위해 잘립니다.

역시.error핸들러를 사용하여 호출됩니다.err물건.하지만, 어떻게 파싱된 json을 잡을 수 있습니까?물론, 나는 응답의 내용 유형이 json인 것을 확인하고 나서 구문 분석할 수 있습니다.err.responseText저도요, 하지만 그것이 jQuery agax가 저를 위해 해야 할 일 아닙니까?내 말은, 내게도 그렇습니다.$.get서버에서 개체를 가져올 때 쿼리합니다.

제가 무엇을 빠뜨리고 있나요?

편집

이것은 https://stackoverflow.com/a/12310751/80002 에 대한 수정 사항입니다.

요청 수행:

var ajax = $.ajax(...

오류 응답 처리:

var res, ct = ajax.getResponseHeader("content-type") || '';
if (ct.indexOf('json') > -1) {
  res = $.parseJSON(err.responseText);
  // process the response here
}

저는 같은 문제에 부딪혔고 @Barmar의 대답과 약간 다른 방법을 발견했습니다.

게다가responseText또한 있습니다.responseJSON다음 작업을 수행할 수 있도록 속성을 참조하십시오.

var json_response = err.responseJSON.msg;

네가 만약console.log(err);페이지의 오류 메시지에 사용할 속성이 몇 가지 있습니다.

200이 아닌1 오류 메시지의 경우HTTP 상태 코드입니다. 내용은 jQuery에 의해 구문 분석되지 않습니다.반환된 결과를 JSON에 직접 구문 분석하지 않으려면 HTTP 상태 200을 반환하고success(done) 콜백.

당신이 HTTP 코드 409를 사용하고 있다는 것은 좋은 신호이며, 저는 당신이 계속 그렇게 해야 한다고 생각합니다. 단지 당신의 오류 처리기에서 JSON을 수동으로 구문 분석하기만 하면 됩니다.구문 분석에 실패하면 다른 문제(예: 일시적인 네트워크 오류)가 발생하지만 이를 통해 성공 함수에 너무 많은 오류를 기록하지 않고도 사용자(및 다른 사용자)가 사용할 수 있는 훌륭한 API를 구축할 수 있습니다.

지킨다success행복한 결과를 위해, 그리고.error불행한 결과를 위하여

1 기술적으로 모든 2xx 상태는 성공으로 간주되어야 합니다. jQuery에서는 성공으로 간주됩니다.

불러$.parseJSON명시적으로 오류 콜백:

(...)
.error(function (err) {
  var msg = $.parseJSON(err).msg;
  alert(msg);
});

JSON 형식을 얻는 것은 매우 간단합니다.이미 jQuery가 피처링을 했습니다.

var error = error.responseJSON

언급URL : https://stackoverflow.com/questions/12310702/how-to-make-jquery-parse-my-error-response-represented-as-a-valid-json

반응형