duanbarong4321 2018-01-22 17:03
浏览 71
已采纳

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

I'm writing to my model using ajax and if there is an error like a duplicate I need it to throw a json response.

$model = Product::find($id);
$model->{$col} = $request->value;    

try{
        $model->save();
    } catch (Exception $e){   
        return Response::json(['error' => $e->getMessage()], 500);
    }

If there is an error it returns the following with a response code of 200 so my error handling in ajax doesn't get to touch this. I also can't handle it in the success function because it's not pure 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...."}

I found adding http_response_code(500) Before the return did then give me a status response of 500 but the responseText was still the same and contained the extra text and not just pure json

The response I want should look this

{"error":"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...."}

Here's my js ajax code

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);
    }

}

What am I doing wrong that laravel is sending this text that looks like the headers, instead of just the pure json?

Edit: Added code before try catch

Also, I am purposefully causing this error so I can make sure my error handling is working but isn't because I'm not getting pure json and it's returning a 200 response code

  • 写回答

2条回答 默认 最新

  • duannan3959 2018-01-24 14:21
    关注

    Ok so after lots of testing I found the problem. With my ajax data that I send back to the server, I send a function name with that calls the function to use. The problem was that I was using echo for pushing the data back.

    echo $_POST['ajax_function_name']();
    

    Changing the echo to return will now return the correct json response when using Response::json();

    The reason behind this happening was moving functions from a legacy app to the new laravel app and overlooked this issue.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑