首页 文章

Laravel,使用jquery ajax返回400错误

提问于
浏览
1

我几个月前使用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()不显示消息但显示 undefined 并且我不知道发生了什么 .

我希望你能帮助我 .

Solved

检查我的自我答案 .

2 回答

  • 2

    Solved

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

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

    并且工作正常!

  • 4

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

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

    另见this question .

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

相关问题