我几个月前使用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 回答
Solved
我可以使用以下方法收到失败的json:
并且工作正常!
我认为您的问题是,根据jQuery documentation,您的数据实际上并未发送到
fail
函数:另见this question .
如果您想解决这个问题并且仍然能够在发生故障时将一些数据发送回客户端,则解决方法可能是始终返回200响应,但包含一个
'success'
参数,指示操作是否成功完成,只需处理done
回调中的所有内容 .