2013-03-08 57 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