【发布时间】:2015-02-01 09:10:36
【问题描述】:
我有这个代码:
$.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() 回调插入 .done()。有了这些信息,我如何从 .fail() 中的 JSON 中捕获 error 键以显示给用户?
我找到了这段代码:
$.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.
})
关于 SO 的 this 主题,但不知道是否正确以及是否会以某种方式影响我的代码。
有什么帮助或建议吗?
【问题讨论】:
-
如果你得到 JSON,你就在 done() 方法中
-
如果邮件地址是
err.error,你为什么要访问err.Message呢?你为什么要使用eval()来解析你的 JSON? -
...您所说的“抓住”
error键是什么意思?你是在抛出一个错误,或者这只是对catch这个词的不幸使用,它具有非常特殊的含义? -
@squint 我从某个地方得到该代码并且未经测试只是对我很好奇它应该如何工作以修改和适应我的环境,应该是
err.error如你所说?对于catch,我的意思是当服务器端出现任何故障时,我会向 Ajax 请求发送400响应,并且还会将应用程序的通用消息作为 Json 发送,但我很确定这将是来自Ajax、jQuery、jqXHR 方面,我说得对吗?我需要捕获所有这些,来自 400 响应的 JSON 和来自 jqXHR 的,为什么? -
如果我理解正确,更清晰的标题可能是“当 HTTP 响应有失败代码时如何从 JSON 响应中读取属性?”
标签: javascript jquery ajax json jqxhr