我有这个用于从Web服务接收类的标准代码:
function getStuff() {
var callParams = "{'param1':'" + "oren" + "'}"
$.ajax({
type: "POST",
url: "http://192.168.5.223:8989/TolunaAPI.asmx/GetDummyType",
data: callParams,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert(data);
....
这会发出一条警告:[object Object] 我尝试在这里和JQuery文档中阅读一些相关的帖子,但我无法理解究竟什么是“数据”对象 Web服务返回的内容是名为DummyType的对象:
public class DummyType
{
public ErrorTypes error;
public NestedDummyType nested;
public DummyType() { }
public DummyType(string paramName)
{
error = ErrorTypes.None;
nested = new NestedDummyType();
}
}
}
如您所见,其中有另一个对象,即NestedDummyType:
public class NestedDummyType { public string nestedString; public int nestedInt; public NestedDummyType() { nestedString = "Hello from nested"; nestedInt = -1; } }
所有这些都应该以json格式返回,但如上所述,我似乎无法解释收到的数据。
这是怎么做的?
感谢。
答案 0 :(得分:3)
你应该能够这样做(.d
是因为你在.Net):
alert(data.d.nested.nestedString);
您正在访问该对象,就像在C#中一样,只是通过属性进行操作。对象d
是您传回的DummyType
,因此只需访问它上面的属性,就像它们在服务器上的C#类型中命名一样,就是它们被序列化为客户。
如果由于某些原因我已经掩盖某些内容并且这不起作用,请删除.d
,但不应该。
答案 1 :(得分:1)
所以,如果你这样做:
success: function (data) {
alert(data.nestedInt)'
alert(data.NestedDummyType.nestedString);
...
你得到你期望的结果吗?
编辑:万一你有asp.net,2.0和3.5在数据中返回不同的值,dataFilter中的这个解析函数将解决这个问题并适用于这两个版本:
$.ajaxSetup({
data: "{}",
datatype: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function(data)
{
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
error: function(xhr, textStatus, errorThrown)
{
//handle errors
}
});
答案 2 :(得分:1)
如果服务器端脚本有效地返回格式正确的JSON,jquery将自动解析它,数据对象将包含已解析的对象,即您的NestedDummyType对象。您是否尝试过成功回调?
success: function (data) {
alert(data.nested.nestedString);
alert(data.nested.nestedInt)
}
答案 3 :(得分:0)
当我想了解一个对象时,这是我在javascript中使用的一个有用的小片段。
var s = "";
for(x in data)
s += x + "=" + data[x] + "\r\n";
alert(s);
它会提醒对象data
的所有方法/属性,但不是递归的(所以你不会看到nested
中的任何内容。