私は、データベースからレコードを読み取り、jsonオブジェクトを返すPHPスクリプトを持っています。私はスクリプトでエラー処理をしているので、例外がスローされたり、他のエラーが発生したりすると、(エラーコードとすべてで)うまく形成されたjsonレスポンスが返されます。これは機能します。PHPの警告とエラーがjsonパーサを破損しないようにしますか?
しかし、もし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データとは何ですか?この予期しない空白文字を生成しているものを探してみましょう。 :) –