2013-03-08 53 views
0

我有一個簡單的WebMethod:ASP.NET的WebMethod返回的對象作爲JSON但不響應方法

<WebMethod(Description:="Does something.")> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
Public Shared Function ReturnJSONData() As Person 
    Dim guy As New Person 
    guy.Name = "Joe" 
    guy.Age = 8 
    Return guy 
End Function 

和這裏是我打電話的AJAX方法:

function GetPerson() { 
    PageMethods.ReturnJSONData(OnWSRequestComplete1); 
} 
function OnWSRequestComplete1(result) { 
    alert(result.d); 
} 

當我使用像螢火蟲的工具,我可以看到JSON結果:

{"d":{"__type":"Person","Name":"Joe","Age":8}} 

然而,當我稱之爲「警報(result.d)」我得到了一個未定義。我錯過了什麼嗎?

+0

確保'result'不是JSON *字符串*。如果是這樣,你需要首先將它解析成一個對象('JSON.parse')。 – voithos 2013-03-08 18:39:14

回答

0

當您從WebMethod獲得響應時,您需要評估響應,因爲它作爲字符串返回。因爲安全風險,我會猶豫在您的代碼中使用eval

如果您使用的是jQuery,則可以調用jQuery.parseJSON(result),它將返回您期望的實際JavaScript對象。

+0

我嘗試使用警報(jQUery.parseJSON(result));現在它在我的警報彈出窗口中顯示爲空?但是我的調試結果仍然如上所示。我不確定這是否有助於解決任何問題,但是當我查看Response頭時,它指出Content-Type是「application/json; charset = utf-8」,這正是我所期望的,但是我仍然無法在警報窗口中看到JSON。 – TreK 2013-03-08 20:08:42

+0

你使用的是什麼版本的jQuery? 'null'似乎是一個非常奇怪的返回值,因爲如果它不能解析它,它應該拋出一個異常。 – 2013-03-08 20:13:56

+0

我正在使用版本1.7.1 – TreK 2013-03-08 20:17:43