如何使用AJAX从JQuery中的“success”回调方法解析返回的对象

时间:2010-09-07 12:10:47

标签: jquery ajax

我有这个用于从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格式返回,但如上所述,我似乎无法解释收到的数据。
这是怎么做的?
感谢。

4 个答案:

答案 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中的任何内容。