0

私はphp開発には比較的慣れていませんが、一般的なWeb開発には慣れていません。

私は次のphpファイルを持っています:

<?php
class dialogResult{

    var $Message;
    var $Title;
    var $Height;
    var $GenericData;

     function __construct(){
        $this->Height = 10;
    }
}

   header("Cache-Control: no-cache", true);
   header("Content-type: application/json; charset=utf-8", true);
   $dr = new dialogResult();
   $dr->Message = "A Test Message encoded";
   $dr->Height = 10;
   $dr->GenericData = "Empty";
   $dr->Title = "My Message";
   echo(json_encode($dr));
?>

これにより、期待どおりにJSONデータが返されますが、クラスを別のファイルに移動してinclude、include_once、require、require_onceを追加すると、無効なJSONデータが返されます。なぜそうなるのか誰か教えてもらえますか?

このクラスを移動するだけでなく、ファイルが含まれているとデータが無効になります。

ありがとう、

キース

これがインクルードクラスです。私も削除してみましたか?>

<?php

class dialogResult{

    var $Message;
    var $Title;
    var $Height;
    var $GenericData;

     function __construct(){
        $this->Height = 10;
    }
}

どこにも先頭または末尾のスペースはありません。返される「無効な」JSONは次のとおりです。

{"Message":"A Test Message encoded","Title":"My Message","Height":10,"GenericData":"Empty"}

JSONLintを使用して解析しようとすると、「予期しないトークン」が表示されます。もちろん、JSONLintに手動で入力すれば問題ありません。識別できない/JSONに表示されない文字があると思いますが、それを見つける方法がわかりません。

4

3 に答える 3

4

Martin や navnav のコメントも正しいですが、通常、空白はバイナリ形式 (GIF、JPEG など) の場合と同様に Json 形式を無効にしません。

したがって、問題は、多くのエディターが表示しない、またはファイルの先頭に追加する 2/3 バイトのヘッダーであるBOM ヘッダーである可能性があります。

編集

BOM を削除する方法として考えられるのは、BOMを検出して削除できるバイナリ セーフ エディターを備えたphpstormのような IDE を使用することです。

于 2012-06-29T12:20:00.303 に答える
2

含まれているファイルの画面に何かをエコー/印刷している可能性があります。

JSON は他のコンテンツとはうまくいきません。

また、あなたの?>タグ - そのタグの後に改行/スペースはありますか? もしそうなら、あなたの問題があります。それらを削除します。実際、ファイルに PHP コードのみが含まれている場合は、?>タグは不要なので完全に削除してください。

于 2012-06-29T12:11:48.147 に答える
0

[?php と ?] の前後に空白文字があるかどうかをクラスで確認してください。これにより、ブラウザーに提供されるコンテンツがトリガーされ、HTTP ヘッダーを作成できないという警告が作成され、不適切な JSON が生成されます。

スクリプトを確認してください-これを含めているもの-も。

この正確な理由から、多くの Web 開発者が単に ?> を使用しないことが「ベスト プラクティス」になっています。

無効なデータはどのように見えますか?

于 2012-06-29T12:12:25.837 に答える