【问题标题】:Laravel, return response 400 error with jquery ajaxLaravel,使用 jquery ajax 返回响应 400 错误
【发布时间】:2014-09-15 01:38:36
【问题描述】:

几个月前我使用 Laravel 4.1 构建了一个 Web 系统,在我的请求中我使用了 Response::json();将数据返回到 jquery ajax。

  • 200 返回成功并被 ajax 的 .done() 捕获。
  • 400 返回失败/错误并被 ajax 的 .fail() 捕获。

而且效果很好!

现在的问题是,我正在使用 Laravel 4.2 构建另一个 Web 系统,并且使用相同的错误代码 200 和 400... 200 可以正常工作,但 400 不能正常工作,例如:

Laravel

<?php

    public function example()
    {
        if (Input::get('param1') === 'value1') {
            return Response::json(array(
                'msg' => 'Correct!' 
            ), 200);
        }

        return Response::json(array(
            'msg' => 'Incorrect!'
        ), 400);
    }
?>

jQuery(我使用的是相同的 jquery 版本:1.10.2)

$.ajax({
    url: 'example',
    type: 'post',
    dataType: 'json',
    data: {param1: 'value1'},
})
.done(function(data) {
    console.log(data.msg);
})
.fail(function(data) {
    console.log(data.msg);
})
.always(function() {
    console.log("complete");
});

两种情况下,请求都正确返回了 json 但是...

当是正确/200 时,ajax 的 .done() 在控制台中正确显示消息,但如果它是不正确/400,则 ajax 的 .fail() 不显示消息而是显示 undefined 并且我不知道怎么回事。

我希望你能帮助我。

已解决

检查我的自我回答。

【问题讨论】:

  • 如果您自己注销data 会怎样?

标签: php jquery ajax laravel


【解决方案1】:

已解决

我可以使用以下方法在失败时接收 json:

fail(function(jqXHR)) {
      console.log(jqXHR.responseJSON.msg);
}

而且工作正常!

【讨论】:

    【解决方案2】:

    我认为您的问题是,根据jQuery documentation,您的数据实际上并未发送到fail 函数:

    jqXHR.fail(function(jqXHR, textStatus, errorThrown) {}); 错误回调选项的替代构造, .fail() 方法替换了已弃用的 .error() 方法。实现细节参考 deferred.fail()。

    另见this question

    如果您想解决这个问题并且仍然能够在发生故障时将一些数据发送回客户端,解决方法可能是始终返回 200 响应,但包含一个 'success' 参数来指示操作是否正常是否成功完成,只需处理 done 回调中的所有内容。

    【讨论】:

    • 是的,但我找到了解决方案:我可以在fail()函数中使用jqXHR参数并使用json元素。 jqXHR.responseJSON.msg 和作品!
    • 恭喜!您可能应该继续添加它作为自我回答,然后帮助其他人稍后回来
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2022-06-13
    • 2019-05-26
    • 2017-02-17
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多