У меня есть этот код:Как прочитать свойство из ответа JSON, когда ответ HTTP имеет код отказа?
$.post(Routing.generate('parMarcaModelo'), {
"marcaId": currBranch,
"modeloId": currModel,
"marcaNombre": currBranchName,
"modeloNombre": currModelName
}, 'json').done(function (data, textStatus, jqXHR) {
// do something here
}).fail(function (jqXHR, textStatus, errorThrown) {
// Catch error from server and logs to console
var err = eval("(" + jqXHR.responseText + ")");
colose.log('Error', err.Message, 20000);
return false;
});
на стороне сервера возвращает JSON как этот:
{
"success":false,
"error":"El par Marca2-Modelo1 ya existe. Por favor escoja otra combinaci\u00f3n.",
}
Но и возвращает 400 код, Ajax вызов будет проходить через .fail()
обратного вызова InstEd из .done()
. Имея эту информацию, как я могу поймать ключ error
от JSON в .fail()
, чтобы показать пользователям?
Я нашел этот код:
$.get('http://localhost/api').then(function(res) {
var filter $.Deferred()
if (res.success) {
filter.resolve(res.data)
} else {
filter.reject(res.error)
}
return filter.promise()
}).done(function(data) {
console.log('Name:', data.name) // Outputs: Foo
}).fail(function(error) {
console.log('Error:', error) // Outputs: Something bad happened.
})
На this тему на SO, но не знаю, если это право, а также если будет влиять на мой код в некотором образе.
Любая помощь или совет?
Если вы получаете JSON, вы используете метод done() –
Если сообщение находится в 'err.error', то почему вы получаете доступ к' err.Message' вместо этого? И почему вы используете 'eval()' для анализа вашего JSON? –
... и что вы подразумеваете под словом 'catch'? Вы бросаете ошибку, или это просто неудачное использование слова 'catch', которое имеет очень специфический смысл? –