JSON和jQuery的问题

时间:2010-04-13 19:46:29

标签: jquery web-services json serialization

我正在调用Web服务并以JSON格式返回以下数据:

[{"OrderNumber":"12345","CustomerId":"555"}]

在我的网络服务成功方法中,我正在尝试解析两者:

$.ajax({
    type: "POST",
    url: "MyService.asmx/ServiceName",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        var data = msg.d;
        var rtn = "";

        $.each(data, function(list) {
            rtn = rtn + this.OrderNumber + ", " + this.CustomerId + "<br/>";
        });

        rtn = rtn + "<br/>" + data;

        $("#test").html(rtn);
        }
    });

但是我得到了一堆“未定义的,未定义的”行,后跟正确的JSON字符串。知道为什么吗?我尝试过使用eval()方法,但这并没有帮助,因为我收到了一些关于“预期”的错误消息。

6 个答案:

答案 0 :(得分:1)

当你正在做each()时,你可能会得到所有正确的值。但在此之后,您将data连接到字符串中,这是整个响应对象(res.d.)。我不知道那可能是你想要的。复杂对象(例如那些可以使用$.each()进行迭代的对象很难通过简单地将它们连接到现有字符串来进行字符串表示。所以这应该会导致你的一些虚假数据。

除此之外,我认为当你试图评估这些价值时,你会遇到错误,这是相当令人不安的。我认为你不应该求助于eval解决方案,但是,你绝对应该能够eval你的数据。如果你不能,那么你的回复中就会出现严重错误。如果eval(myVar)表示期望],那么您需要提醒myVar并向我们提供该值的完整价值。

答案 1 :(得分:0)

我可能错了,但可能就是这样:

 rtn = rtn + list.OrderNumber + ", " + list.CustomerId + "<br/>";

HTH

答案 2 :(得分:0)

不确定我是否遗漏了某些东西但是如果你警告msg.d是值undefined?我认为成功回调的第一个参数是数据本身。所以它可能就是......

msg.OrderNumber + ", ", + msg.CustomerId;

如果它是一个数组,那就像Raja的答案。

$.each(data, function(list, item) {
    rtn = rtn + item.OrderNumber + ", " + item.CustomerId + "<br/>";
});

答案 3 :(得分:0)

假设您使用输入

[{“StreetAddress1”:“123 Main St”,“BusinessName”:“ABC Inc”,“OrderNumber”:“987654”},{“StreetAddress1”:“75 Main St”,“BusinessName”:“Google “,”OrderNumber“:”654321“},{”StreetAddress1“:”27 Main St“,”BusinessName“:”Microsoft“,”OrderNumber“:”123456“}]

    应使用
  1. eval(msg)。不知道你为什么使用msg.d
  2. this.CustomerID将返回undefined,因为JSon Response中没有customerID

答案 4 :(得分:0)

我最终通过这样做得到了它:

var data = eval('(' + msg.d + ')');

我确信这不是很好,但它有效。如果任何人都可以提供其工作原因和/或我的问题的解决方案,我仍然会很感激。 :)

答案 5 :(得分:0)

这有多讽刺......我在一段时间后遇到了类似的问题......这在我的案例中起作用。

function BuildTable(msg) {
 var table = '<table><thead><tr><th>First Name</th><th>Middle Name</th><th>Last       Name</th></thead><tbody>';
for (var i = 0, l = msg.length; i < l; i++)
{
  var person = msg[i];
  var row = '<tr>';
  row += '<td>' + person.FirstName + '</td>';
  row += '<td>' + person.MiddleName + '</td>';
  row += '<td>' + person.LastName + '</td>';
  row += '</tr>';
  table += row;
}
table += '</tbody></table>';
$('#Container').html(table);
}

link text