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