programing

데이터를 삽입했지만 jquery는 여전히 오류를 반환합니다.

css3 2023. 11. 1. 22:31

데이터를 삽입했지만 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