[javascript] Ajax 요청은 200 OK를 반환하지만 성공 대신 오류 이벤트가 발생합니다.
내 웹 사이트에서 Ajax 요청을 구현했으며 웹 페이지에서 엔드 포인트를 호출하고 있습니다. 항상 200 OK 반환 하지만 jQuery 는 오류 이벤트를 실행합니다.
나는 많은 것을 시도했지만 문제를 파악할 수 없었다. 아래 코드를 추가하고 있습니다 :
jQuery 코드
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
에 대한 C # 코드 JqueryOpeartion.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
("Record deleted")
성공적인 삭제 후 문자열이 필요합니다 . 내용을 삭제할 수 있지만이 메시지가 나타나지 않습니다. 이것이 맞습니까? 아니면 잘못된 일이 있습니까? 이 문제를 해결하는 올바른 방법은 무엇입니까?
답변
jQuery.ajax
지정된 dataType
매개 변수 또는 Content-Type
서버가 보낸 헤더 에 따라 응답 본문을 변환하려고 시도 합니다. 변환이 실패하면 (예 : JSON / XML이 유효하지 않은 경우) 오류 콜백이 시작됩니다.
AJAX 코드에는 다음이 포함됩니다.
dataType: "json"
이 경우 jQuery :
응답을 JSON으로 평가하고 JavaScript 객체를 반환합니다. […] JSON 데이터는 엄격한 방식으로 구문 분석됩니다. 잘못된 JSON이 거부되고 구문 분석 오류가 발생합니다. […] 빈 응답도 거부됩니다. 서버는 널 또는 {}의 응답을 대신 리턴해야합니다.
서버 측 코드는 200 OK
상태 와 함께 HTML 스 니펫을 반환 합니다. jQuery는 유효한 JSON을 기대하고 있으므로에 대해 불평하는 오류 콜백을 발생시킵니다 parseerror
.
해결책은 dataType
jQuery 코드에서 매개 변수 를 제거 하고 서버 측 코드를 반환하는 것입니다.
Content-Type: application/javascript
alert("Record Deleted");
그러나 JSON 응답을 반환하고 성공 콜백 내에 메시지를 표시하는 것이 좋습니다.
Content-Type: application/json
{"message": "Record deleted"}
답변
여러 개의 공백으로 구분 된 dataType
( jQuery 1.5+ ) 를 사용하면 행운이 있습니다. 에서처럼 :
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
답변
AJAX 호출에서 dataType : “json” 을 제거하기 만하면됩니다 .
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
답변
이것은 OP와 비슷한 내 문제에 대한 해결책을 찾을 때이 게시물에 부딪 혔기 때문에 기록에 불과합니다.
필자의 경우 Chrome의 동일한 출처 정책 으로 인해 jQuery Ajax 요청이 성공하지 못했습니다 . 서버 (Node.js)를 수정하면 모든 것이 해결되었습니다.
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
말 그대로 벽에 머리를 두드리는 데 1 시간이 걸렸습니다. 바보 같아 …
답변
aspx 페이지가 JSON 객체를 반환하지 않는다고 생각합니다. 귀하의 페이지는 이와 같은 작업을 수행해야합니다 (page_load)
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);
Response.Write(OutPut);
또한 AjaxFailed를 변경하십시오.
function AjaxFailed (XMLHttpRequest, textStatus) {
}
textStatus
발생하는 오류 유형을 알려줘야합니다.
답변
업데이트 된 jQuery 라이브러리 에서이 문제에 직면했습니다. 서비스 방법이 아무것도 반환하지 않으면 반환 유형이void
입니다.
그런 다음 Ajax 전화에서 언급하십시오. dataType='text'
.
문제가 해결됩니다.
답변
당신은 단지 제거해야 dataType: 'json'
구현 된 웹 서비스 메소드가 void 인 경우 헤더에서 하면됩니다.
이 경우 Ajax 호출에는 JSON 반환 데이터 유형이 없을 것으로 예상됩니다.