通过jquery / ajax和json清除抛出phpexception的方法
是否有一种干净,简单的方法通过json响应jquery / ajax调用抛出phpexception。
你可以在PHP中做这样的事情(假设这是通过AJAX调用的):
'vanilla!', )); } catch (Exception $e) { echo json_encode(array( 'error' => array( 'msg' => $e->getMessage(), 'code' => $e->getCode(), ), )); }
在JavaScript中:
$.ajax({ // ... success: function(data) { if (data.error) { // handle the error throw data.error.msg; } alert(data.result); } });
您还可以通过返回400(例如)标头来触发error:
$ .ajax()的处理程序:
header('HTTP/1.0 400 Bad error');
或使用Status:
如果您使用的是FastCGI。 请注意, error:
处理程序不会收到错误详细信息; 要实现你必须覆盖$.ajax()
工作方式:)
Facebook在他们的PHP SDK中做了一些事情,如果HTTP请求因任何原因失败,他们会抛出exception。 您可以采用这种方法,只是在抛出exception时返回错误和exception详细信息:
$results )); } catch (Exception $e) { echo json_encode(array( 'error' => array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) )); }
然后,您可以在JavaScript中监听AJAX调用中的error
键:
如果所有错误都应该以相同的方式处理(例如显示一个对话框)。 你可以这样做:
PHP结束:
public function throwJsonException($msg) { echo json_encode(array('error'=> true, 'msg' => $msg)); } throwJsonException('login invalid!');
jQuery结束:
$(document).ajaxSuccess(function(evt, request, settings){ var data=request.responseText; if (data.length>0) { var resp=$.parseJSON(data); if (resp.error) { showDialog(resp.msg); return; } } });
作为以前答案的补充,您可以将exception处理程序设置为仅在所需的脚本中使用,而不是在所有exception中为json编码重复相同的代码。 例如:
function ajaxExceptionHandler($e) { echo json_encode(array( 'error' => array( 'code' => $e->getCode(), 'msg' => $e->getMessage()) )); }
然后,在你的ajax处理程序中,
set_exception_handler('ajaxExceptionHandler');