JSON和jQuery的问题

JSON和jQuery的问题,jquery,web-services,json,serialization,Jquery,Web Services,Json,Serialization,我正在调用一个web服务并以JSON格式返回以下数据: [{"OrderNumber":"12345","CustomerId":"555"}] 在我的web service success方法中,我尝试解析以下两种: $.ajax({ type: "POST", url: "MyService.asmx/ServiceName", data: "{}", contentType: "application/json; charset=utf-8", d

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

[{"OrderNumber":"12345","CustomerId":"555"}]
在我的web service success方法中,我尝试解析以下两种:

$.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);
        }
    });
$.ajax({
类型:“POST”,
url:“MyService.asmx/ServiceName”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
var数据=msg.d;
var rtn=“”;
$。每个(数据、函数(列表){
rtn=rtn+this.OrderNumber+,“+this.CustomerId+”
”; }); rtn=rtn+“
”+数据; $(“#测试”).html(rtn); } });

但是我得到了一堆“未定义,未定义”的行,后跟正确的JSON字符串。知道为什么吗?我尝试过使用
eval()
方法,但没有起到任何作用,因为我收到了一些错误消息,说需要使用“]”。

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

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

HTH

不确定我是否遗漏了什么,但如果您提醒msg.d,值是否未定义?我认为成功回调的第一个参数是数据本身。所以它可能只是

msg.OrderNumber + ", ", + msg.CustomerId;
如果它是一个数组,那么它将像Raja的答案一样

$.each(data, function(list, item) {
    rtn = rtn + item.OrderNumber + ", " + item.CustomerId + "<br/>";
});
$。每个(数据、功能(列表、项目){
rtn=rtn+item.OrderNumber+”,“+item.CustomerId+”
”; });
当您执行
each()
时,您可能得到了所有正确的值。但紧接着,您将
数据
,即整个响应对象(
res.d.
)连接到字符串中。我不明白那怎么可能是你想要的。复杂对象,例如可以使用
$进行迭代的对象。通过将它们连接到现有字符串中,很难将each()
合理地表示为字符串。所以这应该会导致你的一些虚假数据


除此之外,我认为当您尝试评估这些值时,会出现错误,这相当令人不安。我认为您不应该求助于
eval
解决方案,但无论如何,您应该能够
eval
您的数据。如果你做不到,你的回答中就有严重的错误。如果
eval(myVar)
说它期待一个
]
,那么您需要提醒
myVar
,并给出该值的完整值。

假设您将输入用作

[{“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”}]

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

  • 通过这样做,我终于实现了:

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

    我肯定这不太好,但它很管用。如果有人能提供这样做的原因和/或我的问题的解决方案,我仍将不胜感激。:)

    这有多讽刺。。我以前也遇到过类似的问题。。。这在我的情况下奏效了

    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);
    }
    
    函数构建表(msg){
    变量表='First Name middle Name last Name';
    对于(变量i=0,l=msg.length;i

    我已经删除了响应的一部分,因为它返回的记录数组中的字段比我上面列出的多。如果我运行以下命令,而不仅仅是var data=msg.d:var data=eval(“+msg+”);我得到这个:第21行错误:预期“]”如果您使用到目前为止得到的,但使用
    var data=msg(去掉
    .d
    )?如果我这样做,我只会得到一个未定义的值。@Jayson N.Gaylord:
    eval(“+msg+”)
    msg
    转换为字符串(因为您正在连接它),然后计算结果。由于
    msg
    是一个对象,
    var a=“(“+msg+”)
    将为您提供
    a
    的以下值:
    “([object object])”
    。所以实际上,您正在执行
    eval(([object])”
    ,这显然是行不通的。澄清一下=)我相信我已经在我的其他评论中提到了关于这个问题的所有其他需要说明的内容。当我发出警报时,它会显示正确的JSON字符串。此外,它是一个数组。我已经像Raja提到的那样切换了它,但它没有任何帮助(现在)。您是否也尝试过在$each回调中使用第二个参数?第一个是索引,第二个是值。请参阅上面的编辑…我获取的OrderNumber为null或不是对象。以下是我当前JSON响应的值:[{“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”}以下是我当前回复的价值:[{“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”}]这是通过使用ASP.NET 3.5的JavaScriptSerializer().Serialize()方法来呈现的。我同意这一行rtn=rtn+“
    “+数据;“这有点奇怪。”杰森N.盖洛德:这里有一些事情让我不安。首先,如果我
    eval
    一个包含您发布的值的字符串,我不会得到您描述的错误,因此某些东西在某个点上没有您认为它具有的值。其次,您是否手动调用
    JavaScriptSerializer
    ?因为如果它是一个web方法,正如我所期望的那样,您要做的是返回一个.NET对象,而.NET将自动调用它