본문 바로가기
Developer/Javascript & jQuery

[Ajax] Ajax 200 에러발생시조치사항

by 순수한소년 2017. 12. 21.
728x90
반응형

출처
https://code.i-harness.com/ko/q/5e6712

출처의 내용에서 더 추가하자면,

1. 예상외로 SQL에러

2. Java의 변수 중 이미 String인 변수를 .toString()으로 재변환하는 경우

참고해주세요...

 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);
}

JqueryOpeartion.aspx C # 코드

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

삭제가 성공적으로 완료되면 ("Record deleted") 문자열이 필요합니다. 내용을 삭제할 수는 있지만이 메시지가 표시되지 않습니다. 이게 맞습니까? 아니면 제가 잘못하고 있습니까? 이 문제를 해결하는 올바른 방법은 무엇입니까?

 Answers

Ajax 요청에는 다음 설정이 포함된다.
dataType: "json"

jQuery :

응답을 JSON으로 평가하고 JavaScript 객체를 반환합니다. (...) JSON 데이터는 엄격한 방식으로 구문 분석됩니다. 잘못된 형식의 JSON이 거부되고 구문 분석 오류가 발생합니다.

즉, 서버가 200 OK 상태의 잘못된 JSON을 반환하면 jQuery가 오류 함수를 발생시키고 textStatus 매개 변수를 "parsererror" 로 설정합니다.

해결책 : 서버가 유효한 JSON을 반환하는지 확인하십시오. 빈 응답도 잘못된 JSON으로 간주된다는 점은 주목할 가치가 있습니다. JSON으로 확인하는 예를 들어 {} 또는 null 을 반환 할 수 있습니다.

jsonlint.com 에서 JSON이 유효한지 여부를 확인할 수 있습니다.

여러 개의 space-separated 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
});

귀하의 aspx 페이지 JSON 개체를 반환하지 않는 것으로 생각합니다. 페이지가 다음과 같이해야합니다 (page_load).

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

또한 AjaxFailed를 시도하고 변경하십시오.

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus 는 오류 유형을 알려줍니다.

OP와 비슷한 문제에 대한 해결책을 찾을 때이 게시물에 부딪 혔기 때문에 이것은 기록을위한 것입니다.

제 경우에는 jQuery Ajax 요청이 Chrome에서 동일한 출처 정책 으로 인해 성공하지 못했습니다. 내 서버 (Node.js)를 수정하여 모두 해결되었습니다.

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

말 그대로 벽에 머리를 두드리는 데는 시간이 걸렸습니다. 나는 어리 석다.

AJAX 호출에서 "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
});

구현 된 웹 서비스 메소드가 무효 인 경우 헤더에서 dataType: 'json' 을 제거하면됩니다.

이 경우 Ajax 호출은 JSON 반환 데이터 유형을 기대하지 않습니다.

나는 같은 문제가 있었다. 내 문제는 내 컨트롤러 JSON 대신 상태 코드를 반환했다. 컨트롤러가 다음을 반환하는지 확인하십시오.

public JsonResult ActionName(){
   // Your code
   return Json(new { });
}

업데이트 된 jQuery 라이브러리로이 문제에 직면했습니다. 서비스 메소드가 아무것도 리턴하지 않으면 리턴 유형이 void 임을의 L합니다.

그런 다음 Ajax 호출에서 dataType='text' 를 언급하십시오.

문제가 해결됩니다.

저를 위해 물건을 엉망으로 만들었던 또 다른 일은 127.0.0.1 대신에 localhost 를 사용하거나 그 반대의 경우입니다. 분명히, 자바 스크립트는 하나에서 다른 요청을 처리 할 수 ​​없습니다.

다음 코드를 사용하여 응답이 JSON 형식 (PHP 버전)인지 확인하십시오.

header('Content-Type: application/json');
echo json_encode($return_vars);
exit;

나는 똑같은 문제가 있었다. 내 JSON 응답에 특수 문자가 포함되어 있고 서버 파일이 UTF-8로 인코딩되지 않았기 때문에 Ajax 호출은 이것이 유효한 JSON 응답이 아니라고 생각했습니다.

다음을 시도해보십시오.

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: { "Operation" : "DeleteRow", 
            "TwitterId" : 1 },
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

또는

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

JSON 객체에서 작은 따옴표 대신 큰 따옴표를 사용하십시오. 나는 이것이 문제를 해결할 것이라고 생각한다.


반응형