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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料