jQuery.ajax에서 돌아와서 사후 조치를 사용하여 JSON을 해석하려면 어떻게해야합니까?
문제
다음 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 값?