1

我有这个代码:

$.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.
})

关于这个主题,但不知道是否正确以及是否会以某种方式影响我的代码。

有什么帮助或建议吗?

4

1 回答 1

0

您将'json'作为成功回调函数发送到$.post().

这是正确的函数签名: jQuery.post( url [, data ] [, success ] [, dataType ] )


澄清

此代码将起作用,因为它传入一个空函数来代替“成功”。

$.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 源代码中的第 781-798 行。如果data参数是一个函数,例如success回调,项目将被移动。但是,由于情况并非如此,因此每个参数都将按照它们在函数中出现的位置放入。

在第二个版本中,Ajax.succees将设置为字符串'json',并将Ajax.dataType设置为undefined. 该jqXHR.responseJSON版本的 将返回 a undefined,因为它没有被解析为 JSON。

然而,第一个版本返回一个 JSON 对象。


此外,您编写colose.log而不是console.log在您的代码中。这可能是无法获取数据的原因。

于 2014-12-03T17:36:33.777 回答