javascript - 如何在Jquery中循环访问对象?

标签 javascript jquery asp.net json

我收到 TypeError: field[i] is undefined 来自:

function ObserverFetch() {

               $.ajax({
                   type: "POST",
                   url: "Observer.aspx/ObserverFetch",
                   data: JSON.stringify({ id: "" }),
                   contentType: "application/json; charset=utf-8",
                   dataType: "json",
                   async: true,
                   success: function (data, status) {

                       $.each(data, function (i, field) {

                           alert(field[i].BidderName);
                           //$('#dvBids').text(field);
                           //$("#gvDetails").append("<tr><td>" + field.SrNo + "</td><td>" + field.BidderName + "</td><td>" + field.BidAmt + "</td></tr>");
                       });                     
                   },
                   failure: function (data) {
                       alert(data.d);
                   },
                   error: function (data) {
                       alert(data.d);
                   }
               });
       }

这就是我在field中得到的内容

[{"SrNo":4,"BidderName":"faisal","BidAmt":6000000.0000,"BidDate":"\/Date(1430199508063)\/"},{"SrNo":3,"BidderName":"arbaaz jalil","BidAmt":5000010.0000,"BidDate":"\/Date(1430199494083)\/"},{"SrNo":2,"BidderName":"arbaaz","BidAmt":500000.0000,"BidDate":"\/Date(1430199483530)\/"},{"SrNo":1,"BidderName":"shekhar1","BidAmt":5000.0000,"BidDate":"\/Date(1430199394957)\/"}]

$('#dvBids').text(JSON.stringify(data));给我:

{"d":"[{\"SrNo\":4,\"BidderName\":\"faisal\",\"BidAmt\":6000000.0000,\"BidDate\":\"\\/Date(1430199508063)\\/\"},{\"SrNo\":3,\"BidderName\":\"arbaaz jalil\",\"BidAmt\":5000010.0000,\"BidDate\":\"\\/Date(1430199494083)\\/\"},{\"SrNo\":2,\"BidderName\":\"arbaaz\",\"BidAmt\":500000.0000,\"BidDate\":\"\\/Date(1430199483530)\\/\"},{\"SrNo\":1,\"BidderName\":\"shekhar1\",\"BidAmt\":5000.0000,\"BidDate\":\"\\/Date(1430199394957)\\/\"}]"}

$.each(data.d , function (i, field) { 给我:

TypeError: invalid 'in' operand a

最佳答案

奇怪的是,来自服务器的响应是一个带有单个属性 d 的 JSON 对象,它是一个包含数组 JSON 的字符串。如果是您的服务器方法生成该响应,您可能需要对其进行调整,以使 data.d 是一个数组,而不是一个字符串。

要获取这些结果并循环遍历它们,您需要对其进行解析,然后直接使用 field 而不是通过 i:

var fields = JSON.parse(data.d);
$.each(fields, function(i, field) {
    alert(field.BidderName);
});

或者当然:

$.each(JSON.parse(data.d), function(i, field) {
    alert(field.BidderName);
});

旁注:由于 data.d 的解析版本是一个数组,因此在任何现代浏览器上您都可以使用 Array#forEach 而不是 $.each ,它有一个稍微不太困惑的回调参数列表。 (Array#forEach 可以在 IE8 及更早版本上轻松填充。)

JSON.parse(data.d).forEach(function(field) {
    alert(field.BidderName);
});

两者的实例:

var data = {
    "d": "[{\"SrNo\":4,\"BidderName\":\"faisal\",\"BidAmt\":6000000.0000,\"BidDate\":\"\\/Date(1430199508063)\\/\"},{\"SrNo\":3,\"BidderName\":\"arbaaz jalil\",\"BidAmt\":5000010.0000,\"BidDate\":\"\\/Date(1430199494083)\\/\"},{\"SrNo\":2,\"BidderName\":\"arbaaz\",\"BidAmt\":500000.0000,\"BidDate\":\"\\/Date(1430199483530)\\/\"},{\"SrNo\":1,\"BidderName\":\"shekhar1\",\"BidAmt\":5000.0000,\"BidDate\":\"\\/Date(1430199394957)\\/\"}]"
};

snippet.log("Using $.each:");
$.each(JSON.parse(data.d), function(i, field) {
  snippet.log(field.BidderName);
});

snippet.log("----");
snippet.log("Using forEach");
JSON.parse(data.d).forEach(function(field) {
  snippet.log(field.BidderName);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于javascript - 如何在Jquery中循环访问对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912282/

相关文章:

c# - SQL Server 验证返回错误的输出

javascript - 如何快速清除 JavaScript 对象?

javascript - Jquery 滚动功能不适用于 iphone 设备

javascript - 如何从 (new Date).getTime() 计算年份

javascript - 如何将复选框的数量限制为1

javascript - Ajax 和 PHP 同一页面无法正常工作

jquery - 使用固定标题偏移 anchor 链接

javascript - 无法理解此展平对象上的 ` recursion and closure scope`

asp.net - 为 ASP.Net Core Weblistener 安装 SSL 证书

c# - 如何使用 asp.net C# 从 GridView 中的 TemplateField 获取值?