我正在使用ajax写入我的模型,如果有重复的错误,我需要它来抛出json响应。
$model = Product::find($id);
$model->{$col} = $request->value;
try{
$model->save();
} catch (Exception $e){
return Response::json(['error' => $e->getMessage()], 500);
}
如果出现错误,则返回以下内容,响应代码为200,因此我在ajax中的错误处理无法触及此问题。我也无法在成功函数中处理它,因为它不是纯粹的json
HTTP/1.0 500 Internal Server Error
Cache-Control: no-cache, private
Content-Type: application/json
Date: Mon, 22 Jan 2018 16:06:17 GMT
{"error":"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...."}
我发现在返回之前添加http_response_code(500)
然后给我一个500的状态响应但是responseText仍然是相同的并且包含额外的文本而不仅仅是纯json
我想要的回应应该看这个
{"error":"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...."}
这是我的js ajax代码
var post_data = {id:$(this.attr('id),value:$(this).value()}
$.ajax({
type:'POST',
data: post_data,
beforeSend:function(){
//stuff here to show user somethign is happening
},
success:function(returned_data){
console.log('successful!')
console.log(returned_data);
},
error:function(event, jqXHR, ajaxSettings, thrownError ) {
console.log('event');
console.log(event);
console.log('jqXHR');
console.log(jqXHR.responseText);
console.log('thrownError');
console.log(thrownError);
}
}
laravel发送的文本看起来像标题,而不仅仅是纯粹的json,我做错了什么?
编辑:在try catch
之前添加代码此外,我故意导致此错误,因此我可以确保我的错误处理工作但不是因为我没有获得纯粹的json并且它返回了200个响应代码
答案 0 :(得分:0)
您可能需要查看App\Exceptions\Handler
答案 1 :(得分:0)
好的,经过大量测试后我发现了问题。使用我发送回服务器的ajax数据,我发送一个函数名称,调用要使用的函数。问题是我使用echo
来推送数据。
echo $_POST['ajax_function_name']();
使用echo
return
更改为Response::json();
现在将返回正确的json响应
这种情况背后的原因是将功能从遗留应用程序转移到新的laravel应用程序并忽略了这个问题。