[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.

해결책은 dataTypejQuery 코드에서 매개 변수 를 제거 하고 서버 측 코드를 반환하는 것입니다.

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 반환 데이터 유형이 없을 것으로 예상됩니다.