我有这段代码:
$.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()
的{{1}}回调。有了这些信息,我如何从.done()
中的JSON中捕获error
密钥以向用户显示?
我找到了这段代码:
.fail()
在SO上的this主题,但不知道是否正确,以及是否会影响我的代码。
任何帮助或建议?
答案 0 :(得分:0)
您要将'json'
作为成功回调函数发送给$.post()
。
这是正确的功能签名:
jQuery.post( url [, data ] [, success ] [, dataType ] )
<强>澄清强>
此代码可以使用,因为它传入一个空函数来代替'success'。
$.post('rest.php', {data : 'data'}, function(){},'json').done(
function (data, textStatus, jqXHR) {
// do something here
}).fail(function (jqXHR, textStatus, errorThrown) {
// Catch error from server and logs to console
console.log('Error', jqXHR.responseJSON, 20000);
return false;
});
但是,此代码不会:
$.post('rest.php', {data : 'data'}, 'json').done(
function (data, textStatus, jqXHR) {
// do something here
}).fail(function (jqXHR, textStatus, errorThrown) {
// Catch error from server and logs to console
console.log('Error', jqXHR.responseJSON, 20000);
return false;
});
要获得证明,请查看jQuery source code中的第781-798行。如果data
参数是函数,例如success
回调,项目将被转移。但是,由于情况并非如此,因此每个参数都将按它们在函数中出现的位置输入。
在第二个版本中,Ajax.succees
将设置为字符串'json'
,Ajax.dataType
设置为undefined
。该版本的jqXHR.responseJSON
将返回undefined
,因为它未被解析为JSON。
然而,第一个版本返回一个JSON对象。
此外,您在代码中写了colose.log
而不是console.log
。这可能就是无法获取数据的原因。