어떻게 하면 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
'source' 카테고리의 다른 글
MariaDB / 파일 키 관리 암호화:키 파일에 구문 오류가 발생 (0) | 2023.08.15 |
---|---|
jQuery의 ajax crossDomain 속성을 사용하시겠습니까? (0) | 2023.08.15 |
도커 합성에서 호스트 이름을 설정하려면 어떻게 해야 합니까? (0) | 2023.08.15 |
함수가 있는 JavaScript 3차 연산자 예제 (0) | 2023.08.15 |
Android - 보기 안에 어린이를 넣습니까? (0) | 2023.08.15 |