jQuery.ajax에서 돌아와서 사후 조치를 사용하여 JSON을 해석하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/612515

  •  03-07-2019
  •  | 
  •  

문제

다음 jQuery 코드가 있습니다.

$.ajax({
    type: "POST",
    url: "Services/MyService.asmx/Select",
    dataType: "json",
    data: "{'data':'test'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ 
                alert(msg); 
             },
    error: function(xhr){ alert(xhr.statusText);}                
});

메소드에 대한 호출은 다음을 반환합니다.

"{"FirstName":"James"}"

값을 되 찾으면 Alert가 전체 JSON 문자열을 반환합니다. 내가하려고한다면 alert(msg.FirstName), 나는 "정의되지 않은"것입니다.

getJson () 메소드를 사용하여 많은 예를 보았습니다. 그러나 나는 포스트 동사에 그것을 사용하는 방법을 보지 못했습니다. 누구든지 내가 틀린 곳의 올바른 방향으로 나를 지적 할 수 있습니까? jQuery 문서를 기반으로, 반환 값은 동일한 데이터 유형 (JSON)이어야하므로 내가 누락 된 것이 확실하지 않습니다.

편집 : 서비스를 살펴 보았고 문자열을 반환하는 메소드 서명 측면에서 찾는 예제입니다. 응답 유형이 응용 프로그램/json의 반응을 확인했습니다.

edit2 : 외부 따옴표를 포함하도록 응답을 업데이트했습니다. 또한 JSON 직렬화를 수행하기 위해 사용자 정의 JavaScriptConverter를 사용하고 있습니다. 사용자 정의 변환기는 내 객체 속성 (이 경우 FirstName)을 가져 와서 값을로드하여 ASP.NET AJAX Extensions v1.0이 쉽게 직렬화 할 수있는 사전 컬렉션에 값입니다.

edit3 : eval ()와 함께했던 문제를 조사하는 ( Expected ";" 오류), JSON 속성 이름도 인용문으로 둘러싸여 있음을 알았습니다. 속성 이름 (값이 아닌)에서 따옴표를 제거하면 Eval ()가 다시 작동했습니다. 이 문제의 서버 측면을 살펴보십시오.

도움이 되었습니까?

해결책

jQuery .ajax 사용법은 견고하게 보입니다. 반환 된 데이터를 어떻게 확인하고 있습니까? 개똥 벌레? 바이올리니스트? 왜냐하면 .asmx WebServices는 데이터를 반환하지 않습니다 {"FirstName":"James"}. 응답은 다음과 같습니다.

{"d":{"FirstName":"James"}}

(보다 http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/)

당신을 위해 success 콜백, 시도 :

function(res) { alert(res.d.FirstName) }

편집하다: ASP.NET AJAX의 업데이트 및 의견 Re v1.0을 보았습니다.

나는 v1.0이 당신의 응답을 직렬화하는 방법을 어떻게 작동시키는 지 긍정적이지 않지만, 당신이 당신의 웹 서비스 메소드에서 자신의 Custom JSON 직렬화를하고 있다면, 응답이 JSON이 직렬화 될 수 있습니다. 다시. 그래서 당신은 두 번 직렬화됩니다.

나는 당신이 사용하는 모든 구성 요소가 그들이 예상하는 일을하고 있다고 생각합니다. success 서버에서 수동으로 직렬화되므로 콜백은 수동으로 비소화해야합니다.

function(res) {
    res = eval('(' + res + ')');
    alert(res.FirstName);
}

다른 팁

IIRC는 문자열을 평가할 수 있으며 결과는 JSON 객체입니다.

myjson = eval (jsonstring);

JSON 객체를 사용하여 게시물 변수를 두 번째 매개 변수로 정의 할 수 있습니다.

예시:

$.getJSON("service.py",
    { foo: bar },
    function(data) {
        $.each(data, function() { // blah });
    }
);

편집 : 지금 무슨 말인지 봅니다. 서비스가 "Something/JSON"을 MIME 유형으로 반환합니까? Firebug의 응답 헤더를보고 있다면 다음과 같은 보입니다.

Content-Type    application/json; charset=utf-8

다음과 같은 것을 시도하십시오.

 result = eval('(' + result.d + ')');

당신은 사용할 수 없습니다 $getJSON ASMX 서비스를 통해 직렬화됩니다 System.Web.Extensions. 당신은 올바르게 전화를 걸고 있습니다 $.ajax().

FireBug를 사용하여 성공 핸들러 내부에서 중단 점을 설정하고 MSG 값?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top