Как ответ от сервера я получаю:
{"vorname":["muss ausgefüllt werden"],"name":["muss ausgefüllt werden"]}
Итак, что я делаю с этим Json Array xhr.responseText
:
$.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
console.log(val[0]);
});
Обычно я ожидал бы этого выхода:
vorname
name
Но я получаю:
muss ausgefüllt werden
muss ausgefüllt werden
Зачем? И как мне это исправить? благодаря
Зачем? И как мне это исправить?
Результатом jQuery.parseJSON(xhr.responseText)
является объект, а $.each
передает имя свойства в качестве первого аргумента, а его значение - вторым аргументом для обратного вызова.
Кажется, вы хотите записать имя, поэтому вам нужно записать i
, а не значение val
:
$.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
console.log(i);
});
Примером в документации является довольно самоочевидная ИМО:
Если в качестве коллекции используется объект, обратный вызов передается парой ключ-значение каждый раз:
var obj = { "flammable": "inflammable", "duh": "no duh" }; $.each( obj, function( key, value ) { alert( key + ": " + value ); });
Еще раз это создает два сообщения:
flammable: inflammable duh: no duh
Если вы хотите просто получить key
имя свойства. Я предлагаю вам использовать простой сквозной цикл
for (var item in jQuery.parseJSON(xhr.responseText)) {
console.log(item )
}
РЕДАКТИРОВАТЬ
В настоящее время вы печатаете value
когда вам нужно получить key
имя свойства. Поэтому вы должны напечатать первый аргумент key
для каждого обратного вызова. Таким образом, вы можете использовать.
$.each(data, function(key, val ) {
console.log(key);
});
попробуй это:
var obj = jQuery.parseJSON(yourResponse)
for (var key in obj){
console.log(key + ':' + obj[key])
}
ответ:
vorname: muss ausgefüllt werden имя: muss ausgefüllt werden
Попробуй это:
$.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-^^--
где item before :
в предупреждении - это ключ в объекте json, а другой - соответствующее значение.
Потому что вы печатаете VAL, а не KEY. У вас есть то, что вы ожидаете:
$.each(jQuery.parseJSON(xhr.responseText), function( key , val ) {
console.log(key);
});
Объяснение: Если вы посмотрите на JQuery API:
"[..] Функция $.each() может использоваться для итерации по любой коллекции, будь то объект или массив [..] Метод возвращает свой первый аргумент, объект, который был итерирован. [..]"
i
неval