1

申し訳ありませんが、本当に基本的な質問であることは間違いありません...しかし、重複の可能性は見つかりませんでした。

$ .getJSON()を使用して呼び出されたphpスクリプトの最後に、次のような行があります。

return json_encode( $paras_of_interest );

...すべてが正常に機能します...いくつかのphp出力が表示されるまで(誤ってechoコマンドによって、またはおそらくphpコードによって生成された警告またはエラーが原因で)...これにより、完全に無効化/停止/混乱しますJSONオブジェクトの戻り。この状況に対処する最良の方法は何ですか?どのコードが出力されたか(つまり、どこに「行く」か)をどのように知ることができますか...そして、この状況で出力がどこに行くかを構成する方法はありますか?

その後 、DezigoとSalman Aに謝罪しました。3つすべてが優れた回答でしたが、1つを選択する必要がありました。

4

3 に答える 3

2

出力バッファを保存できます(クリーンアップを終了します)

<?php

ob_start();

echo "Hello ";

$out1 = ob_get_contents();

ob_end_clean();

var_dump($out1);
?>

http://www.php.net/manual/en/function.ob-get-contents.php

于 2013-02-26T09:57:01.800 に答える
1

どのコードが出力されたかをどのように知ることができますか(つまり、どこに「行く」のでしょうか?)

ブラウザの開発者ツールを開き、ページを開いて[ネットワーク]タブを監視します。そこにすべてのXHRが記録されているはずです。これには、壊れたJSON応答が含まれます。

また、JavaScriptライブラリは壊れたJSONを処理しません。たとえば、jQueryはそのような応答を無視し、エラーハンドラーを起動します(構成されている場合)。JavaScriptライブラリによっては、成功/エラーハンドラーによってrawへのアクセスが提供される場合がありますresponseText

于 2013-02-26T10:35:51.090 に答える
1
  1. この行の前に出力がないことを確認してください。

    • エラーの場合は、display_errorsディレクティブを0に設定するか、カスタムエラーハンドラーを使用します
    • 例外については、try/catchブロックを使用してください
    • その他の出力については、存在する可能性がある場合は、出力バッファリング(ob_startおよびob_get_clean)を使用します。
  2. 予期しない出力/エラーをキャプチャした場合は、送信せずに、JSON応答にエラーパラメーターを追加します。

    echo json_encode(array(
      'result' => /* your original result here */,
      'error'  => /* error message here */
    );
    

応答は常にこのように構成する必要があります。エラーが発生しなかった場合、エラーはnullまたはfalseになります。クライアント側では、最初にエラーを評価し、次に結果を評価します。さらに、エラーが発生した場合にHTTP 500ステータスコードを送信すると、JQueryのエラーコールバック関数を使用してエラーを処理できるようになります。

$statusCode = $error ? 500 : 200;
header('content-type: application/json',  true, $statusCode);
于 2013-02-26T10:14:15.377 に答える