Is there a clean, easy way to throw php exceptions through a json response jquery/ajax call.
You could do something like this in PHP (assuming this gets called via AJAX):
<?php try { if (some_bad_condition) { throw new Exception('Test error', 123); } echo json_encode(array( 'result' => 'vanilla!', )); } catch (Exception $e) { echo json_encode(array( 'error' => array( 'msg' => $e->getMessage(), 'code' => $e->getCode(), ), )); }
In JavaScript:
$.ajax({ // ... success: function(data) { if (data.error) { // handle the error throw data.error.msg; } alert(data.result); } });
You can also trigger the error:
handler of $.ajax() by returning a 400 (for example) header:
header('HTTP/1.0 400 Bad error');
Or use Status:
if you're on FastCGI. Note that the error:
handler doesn't receive the error details; to accomplish that you have to override how $.ajax()
works :)
Facebook do something in their PHP SDK where they throw an exception if a HTTP request failed for whatever reason. You could take this approach, and just return the error and exception details if an exception is thrown:
<?php header('Content-Type: application/json'); try { // something; result successful echo json_encode(array( 'results' => $results )); } catch (Exception $e) { echo json_encode(array( 'error' => array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) )); }
You can then just listen for the error
key in your AJAX calls in JavaScript:
<script> $.getJSON('http://example.com/some_endpoint.php', function(response) { if (response.error) { // an error occurred } else { $.each(response.results, function(i, result) { // do something with each result }); } }); </script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With