Javascript 如何在Jquery中循环对象?
我从以下信息中获得Javascript 如何在Jquery中循环对象?,javascript,jquery,asp.net,json,Javascript,Jquery,Asp.net,Json,我从以下信息中获得TypeError:字段[I]未定义: function ObserverFetch() { $.ajax({ type: "POST", url: "Observer.aspx/ObserverFetch", data: JSON.stringify({ id: "" }), contentTy
TypeError:字段[I]未定义
:
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);
}
});
}
$('#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)\\/\"}]"}
TypeError: invalid 'in' operand a
$.each(data.d,function(i,field){给我:
{"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)\\/\"}]"}
TypeError: invalid 'in' operand a
奇怪的是,来自服务器的响应是一个JSON对象,只有一个属性,
d
,它是一个字符串,包含数组的JSON。如果是您的服务器方法生成该响应,您可能希望调整它,使data.d
是一个数组,而不是字符串
要获得这些结果并循环它们,您需要对其进行解析,然后直接使用字段,而不是通过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
而不是$。每个
都有一个稍微不那么混乱的回调参数列表。(array#forEach
可以在IE8和更早版本上轻松填充。)
这两个方面的活例子:
var数据={
“d”d:“d”d:“d”d:“d”d:“d”d:“d”d:“d”d:“d”d:“,“投标日期:”:,,“投标日期:”:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“投标日期:,,,,,,,,,,,,,,,,,,,,,,“投标日期:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1430199483530)\/\“},{\'SrNo\':1,\”投标人名称\“:\“shekhar1\”,“BidAmt\”:5000.0000,\“BidDate\”:\“\\/日期(1430199394957)\/\”}”
};
log(“使用$.each:”;
$.each(JSON.parse(data.d)、函数(i、字段){
snippet.log(field.BidderName);
});
snippet.log(“---”);
log(“使用forEach”);
parse(data.d).forEach(函数(字段){
snippet.log(field.BidderName);
});
问题在于,在var-fiel
中,数组的每个元素都有一个值。解决方案bn是:
$.each( obj, function (i, field) {
alert(field.BidderName );
});
感谢您的解决方案奏效。我已经在问题中添加了服务器端代码。对于Jquery/ajax请求,我非常不在行。@Arbaaz:很高兴这有帮助。我将从问题中删除服务器端代码,然后发布一个新问题,问到“如何使此代码返回数据的数组。d
而不是字符串?”(包括它当前返回的JSON)。最好就是这样做。