Laravel Ajax响应返回json上方的文本

时间:2018-01-22 17:03:44

标签: php ajax laravel-5.5

我正在使用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个响应代码

2 个答案:

答案 0 :(得分:0)

您可能需要查看App\Exceptions\Handler

答案 1 :(得分:0)

好的,经过大量测试后我发现了问题。使用我发送回服务器的ajax数据,我发送一个函数名称,调用要使用的函数。问题是我使用echo来推送数据。

echo $_POST['ajax_function_name']();

使用echo

时,将return更改为Response::json();现在将返回正确的json响应

这种情况背后的原因是将功能从遗留应用程序转移到新的laravel应用程序并忽略了这个问题。