Laravel,使用jquery ajax返回400错误

时间:2014-07-23 18:07:44

标签: php jquery ajax laravel

我几个月前使用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,但是......

当Correct / 200时,ajax的.done()在控制台中正确显示消息,但如果它不正确/ 400,ajax的.fail()不显示消息但显示未定义我不知道发生了什么。

我希望你能帮助我。

解决

检查我的自我回答。

2 个答案:

答案 0 :(得分:4)

<强>解决

我可以使用以下方法收到失败的json:

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

工作正常!

答案 1 :(得分:2)

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

  

jqXHR.fail(function(jqXHR,textStatus,errorThrown){});   作为错误回调选项的替代构造,.fail()方法替换了不推荐使用的.error()方法。有关实现的详细信息,请参阅deferred.fail()。

另见this question

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