我有一個PHP腳本從數據庫讀取記錄並返回一個json對象。我在腳本中有錯誤處理,這樣如果發生異常或發生其他錯誤,我仍然返回格式正確的json響應(帶有錯誤代碼和全部)。這工作。防止破解json解析器的PHP警告和錯誤?
但是:如果PHP覺得有什麼可說的話,它在發送json響應後仍然會說。這打破了客戶端的json解析器。因此,而不是ajax調用成功,並顯示錯誤消息,如「數據庫文件未找到」,調用失敗,帶有json解析器錯誤,這是沒有用的(因爲它覆蓋原始,保存錯誤信息):
SyntaxError: JSON.parse: unexpected non-whitespace character
after JSON data at line 1 column 120 of the JSON data
我可以用來抑制PHP的消息error_reporting(0) - 但有沒有更好的方法?代碼(輪廓)如下:
<?php
header('Content-type: application/json');
const RESP_OK = 0;
const RESP_EXCEPTION = 1;
try {
// do the database stuff and build $response
$response['exitcode'] = RESP_OK;
} catch (Exception $e) {
// put error info in the response
$response['exitcode'] = RESP_EXCEPTION;
$response['error'] = 'code: ' . $e->getCode() . ' (line ' .
$e->getLine() . ') message: ' . $e->getMessage();
} finally {
// always send back a response
echo json_encode($response);
error_reporting(0);
// also close the db here etc.
}
?>
我會迴應Maarten的答案 - 防止來自PHP的錯誤和警告的最佳方式是追蹤導致它們的原因,而不是尋找解決方法。 –
我同意。關鍵是,我已經在檢查(全部)錯誤。這就像例外:一旦你使用try/catch來處理它們,你不希望發生默認的異常行爲(例如,你希望自己的錯誤信息在你自己的應用程序中正確顯示)。我可以捕捉異常,但沒有嘗試/捕獲PHP的警告和通知(是嗎?),所以即使我檢查所有結果並相應地繼續,PHP仍然發佈它們,並打破了應用程序。 –
返回的JSON數據是什麼?那麼我們如何尋找那些產生這個意想不到的空白字符的東西呢? :) –