데이터를 삽입했지만 jquery는 여전히 오류를 반환합니다.
저는 데이터 서비스를 통해 데이터를 삽입하기 위해 jQuery를 팔로우했습니다.상태 응답 201을 받고 데이터가 데이터베이스에 성공적으로 삽입되었지만 시스템은 여전히 오류로 간주하고 "실패" 경고를 표시합니까?
내가 뭘 놓치고 있는 거지?
$.ajax({
type: "POST",
url: "http://localhost:49223/Form/WebDataService.svc/XMLForm(guid'1eaef3a0-d6df-45bf-a8f6-3e7292c0d77e')/XMLRecord/",
data: JSON.stringify(record),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {
alert("Success");
},
error: function(xhr) {
alert("fail");
}
});
업데이트:
Fire Bug에서 디버그 메시지:
Preferences
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
jquery....min.js (line 127)
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
201 Created 6.7s
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
201 Created
get readyState 4
get responseText "{ "d" : {\r\n"__metadata"...\')/XMLForm"\r\n}\r\n}\r\n} }"
get responseXML null
get status 201
get statusText "Created"
성공 함수가 jQuery 및 빈 응답과 함께 작동하도록 하려면 {dataType: 'text'}을(를) 전송해야 합니다.
해결책:
이전 코드에서 오류가 발생하는 방법을 여전히 파악할 수 없지만, (적어도 지금은) 저에게 적합한 대체 솔루션을 얻었습니다.
더 많은 아이디어를 듣고 싶습니다.
모두에게 감사를 표합니다.
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "http://localhost:49223/Form/WebDataService.svc/XMLForm(guid'1eaef3a0-d6df-45bf-a8f6-3e7292c0d77e')/XMLRecord/",
data: JSON.stringify(record),
complete: function(xhr) {
if (xhr.readyState == 4) {
if (xhr.status == 201) {
alert("Created");
}
} else {
alert("NoGood");
}
}
//
// success: function(data) {
// alert("Success");
// },
// error: function(xhr) {
// alert("fail" + xhr);
// }
});
내용이 없는 201이 반드시 유효하지 않은 것으로 간주되기 때문이 아니라 빈 문자열("")을 구문 분석하는 것이 JSON 구문 분석 오류이기 때문에 발생합니다.
이 동작은 dataFilter를 설정하여 전역적으로 또는 요청별로 변경할 수 있습니다.
$.ajaxSetup({
dataFilter: function(data, dataType) {
if (dataType == 'json' && data == '') {
return null;
} else {
return data;
}
}
});
전에 이런 일이 있었어요.제 문제는 질의 문자열 끝에 '.json' 확장자가 포함되어 있지 않아서 XML을 돌려받고 있었습니다.jQuery가 xml을 json으로 구문 분석하려고 하면 오류 처리기가 호출됩니다.
저는 jQuery_2.1.1을 사용하는데 비슷한 문제가 있었습니다. PUT가 error() handler로 넘어갔습니다.나의 REST api call principle은
- PUT to named key path (/rest/properties/mykey1): 204=기존 개체 updated, 201=새 개체 생성 및 반환 위치 헤더, XXX=anything 등 오류와 가장 유사합니다.
- 알 수 없는 키 경로(/rest/properties)로 POST: 201=새 개체를 만들고 위치 헤더를 반환합니다. XXX= anything 기타 오류가 가장 많습니다.
http status 204는 NoContent라서 jQuery는 괜찮았지만 201=Created는 json body object를 기대하고 있었는데 0length body part를 반품했습니다.위치 응답 헤더에 리소스 주소가 지정되었습니다.
몇 가지 코너 케이스에 따라 json 개체를 반환할 수 있으므로 datatype: "json" 속성을 사용해야 했습니다.나의 jQuery 솔루션은 201 상태 확인 오류()와 call success() 함수였습니다.
$.ajax({
url: "/myapp/rest/properties/mykey1",
data: jsonObj,
type: "PUT",
headers: { "Accept":"application/json", "Content-Type":"application/json" },
timeout: 30000,
dataType: "json",
success: function(data, textStatus, xhr) {
data="Server returned " + xhr.status;
if (xhr.status==201) data+=" "+xhr.getResponseHeader("location");
$("#ajaxreply").text(data);
},
error: function(xhr, textStatus, ex) {
if (xhr.status==201) { this.success(null, "Created", xhr); return; }
$("#ajaxreply").text( textStatus + "," + ex + "," + xhr.responseText );
}
});
다른 유사한 스레드에서 이에 대한 답변입니다.
저도 같은 문제가 있었는데, 이 문제를 해결해 준 한 가지는 "dataType"을 그대로 둔다는 것이었습니다.이 작업을 수행하면 서버가 반환하는 데이터 유형을 추측하고 서버가 컨텐츠가 없는 201을 반환할 때 오류를 발생시키지 않습니다.
언급URL : https://stackoverflow.com/questions/2233553/data-inserted-successful-but-jquery-still-returning-error
'programing' 카테고리의 다른 글
다른 요소 뒤에 요소를 추가하려면 어떻게 해야 합니까? (0) | 2023.11.01 |
---|---|
(ActiveXObject 없이) JavaScript로 Excel 파일을 읽는 방법 (0) | 2023.11.01 |
MySQL: 관계에 참여하지 않는 행 찾기 (0) | 2023.11.01 |
Lazy div 배경 이미지를 로드하는 방법 (0) | 2023.11.01 |
ARC를 사용하고 iOS 4.0을 대상으로 할 때 약한 참조를 대체하려면 어떻게 해야 합니까? (0) | 2023.11.01 |