Я думаю, что это очень простой вопрос, но я потратил часы на поиск ответа, но безуспешно. У меня есть следующий объект json (сгенерированный с использованием play!Framework)
{
"preg.pregunta": [{
"message":"Debes escribir una pregunta",
"key":"preg.pregunta",
"variables":[]
}],
"preg":[{
"message": "validation.object",
"key":"preg",
"variables":[]
}]
}
Это мой фрагмент кода jquery
$.ajax({
type: $target.attr('method'),
data: dataString,
url:$target.attr('action'),
dataType: "json",
beforeSend: function() {
//some stuff
},
success:function(response){
//some stuff
},
error: function(response){
//I want to use the json response here.
}
});
Я хочу получить все внутри preg.pregunta
(значения message
и key
)
Любая помощь?
ОБНОВЛЕНО: ну, у меня недостаточно репутации, чтобы ответить самому себе, это то, что я нашел до сих пор.
Хорошо, может быть, это было бы более чем очевидно, или я нужно еще немного изучить; я обнаружил, что jQuery неправильно анализирует ответ JSON, если он приходит вместе с ошибкой HTTP (в данном случае 400).
кто-то знает, почему такое поведение?
Я только что проверил это код в обработчике success
и отлично работает !
$.ajax({
type: $target.attr('method'),
data: dataString,
url:$target.attr('action'),
dataType: "json",
beforeSend: function() {
},
success:function(response){
//It is working perfectly!
$.each(response,function(object){ //first loop of the object
$.each(response[object],function(values){ //looping inside arrays
console.log(response[object][values].key) //getting value "key"
console.log(response[object][values].message) //getting value "message"
});
})
},
error: function(response){
//nothing happens here
}
});
ОБНОВЛЕНО 2.
после двухчасового поиска я нашел простое решение:
error: function(response){
//Note the jQuery.parseJSON function
var response = jQuery.parseJSON(response.responseText);
$.each(response,function(object){
$.each(response[object],function(values){
console.log(response[object][values].key)
console.log(response[object][values].message)
});
})
}
Объяснение: при использовании обработчика ошибок jQuery возвращает сложный объект, описывающий ошибку, responseText содержит данные, полученные с сервера , поэтому вам нужно разобрать его с помощью функции parseJSON.
Надеюсь, это поможет!