作为来自服务器的响应我得到:
{"vorname":["muss ausgefüllt werden"],"name":["muss ausgefüllt werden"]}
所以我对这个Json数组xhr.responseText
做的是:
$.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
console.log(val[0]);
});
通常我会期望这个输出:
vorname
name
但我明白了:
muss ausgefüllt werden
muss ausgefüllt werden
为什么呢?我该如何解决?感谢
答案 0 :(得分:2)
如果您想获得key
财产的名称。我建议你使用简单的for-in loop
for (var item in jQuery.parseJSON(xhr.responseText)) {
console.log(item )
}
修改强>
目前,您正在打印value
,因为您需要获取key
属性的名称。所以你应该打印key
每个回调的第一个参数。所以你可以使用。
$.each(data, function(key, val ) {
console.log(key);
});
答案 1 :(得分:1)
为什么呢?我该如何解决?
jQuery.parseJSON(xhr.responseText)
的结果是对象,$.each
将属性的名称作为第一个参数传递,其值作为回调的第二个参数。
似乎您要记录名称,因此您必须记录i
,而不是val
的值:
$.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
console.log(i);
});
documentation中的示例是非常不言自明的IMO:
如果一个对象被用作集合,则回调传递a 每次键值对:
var obj = { "flammable": "inflammable", "duh": "no duh" }; $.each( obj, function( key, value ) { alert( key + ": " + value ); });
再一次,这会产生两条消息:
flammable: inflammable duh: no duh
答案 2 :(得分:1)
试试这个:
$.each(jQuery.parseJSON(xhr.responseText), function (key, val) {
console.log(key);
});
根据key
的文档,您必须返回 json对象的$.each()
:
如果对象用作集合(在您的情况下也是 ),则每次都会向回调传递一个键值对。
var obj = {
"flammable": "inflammable",
"duh": "no duh"
};
$.each( obj, function( key, value ) { // key returns key of json object.
alert( key + ": " + value ); // alert(flammable: inflammable);
}); //----------^^key^^----^^-value-^^--
这两次提醒
flammable: inflammable // alert(flammable: inflammable);
duh : no duh //--^^key^^----^^-value-^^--
警报中:
之前的项目是json对象中的键,其他是相应的值。
答案 3 :(得分:1)
试试这个:
var obj = jQuery.parseJSON(yourResponse)
for (var key in obj){
console.log(key + ':' + obj[key])
}
回复:
vorname:mussausgefülltwerden 姓名:mussausgefülltwerden
答案 4 :(得分:0)
因为您正在打印VAL而不是KEY。 有你期望的:
$.each(jQuery.parseJSON(xhr.responseText), function( key , val ) {
console.log(key);
});
<强>说明:强> 如果你看一下JQuery API:
“[..] $ .each()函数可用于迭代任何集合,无论是对象还是数组[...]该方法返回其第一个参数,即迭代的对象。 。]“