Reputation: 1366
I'm using JQuery to call a PHP function that returns a JSON string upon success or throws some exceptions. Currently I'm calling jQuery.parseJSON()
on the response and if it fails I assume the response contains an exception string.
$.ajax({ type: "POST", url: "something.php", success: function(response){ try { var json = jQuery.parseJSON(response); } catch (e) { alert(response); return -1; } // ... do stuff with json }
Can anyone suggest a more elegant way to catch the exception?
Many thanks, Itamar
Upvotes: 2
Views: 5883
Reputation: 449385
Catch the exception in your PHP script - using a try .... catch
block - and when an exception occurs, have the script output a JSON object with an error message:
try
{
// do what you have to do
}
catch (Exception $e)
{
echo json_encode("error" => "Exception occurred: ".$e->getMessage());
}
you would then look for the error message in your jQuery script, and possibly output it.
Another option would be to send a 500 internal server error
header when PHP encounters an exception:
try
{
// do what you have to do
}
catch (Exception $e)
{
header("HTTP/1.1 500 Internal Server Error");
echo "Exception occurred: ".$e->getMessage(); // the response body
// to parse in Ajax
die();
}
your Ajax object will then invoke the error callback function, and you would do your error handling in there.
Upvotes: 3
Reputation: 163228
Well, you can have a global exception handler in PHP that would call json_encode
on it then echo it out.
<?php
function handleException( $e ) {
echo json_encode( $e );
}
set_exception_handler( 'handleException' );
?>
You could then check if, say, json.Exception != undefined
.
$.ajax({
type: "POST",
url: "something.php",
success: function(response){
var json = jQuery.parseJSON( response );
if( json.Exception != undefined ) {
//handle exception...
}
// ... do stuff with json
}
Upvotes: 2
Reputation: 179108
Catch the exception on the PHP end, and output an error message in JSON format:
echo json_encode(array(
'error' => $e->getMessage(),
));
Upvotes: 0