0

この単純なコードを使用して、配列を JSON 構造として出力しています。

header('Content-Type: application/json');
echo json_encode($this->data, JSON_PRETTY_PRINT);

Chrome バージョン 28.0.1500.95 m を使用しています。何らかの奇妙な理由で、出力は先頭にタブ文字 (つまり\t) を持つ pre タグでラップされます。

JSON は正常に解析されているようですが、データが送信されていない場合でもタブ文字が表示されます。どうすればこれを修正できますか?

<pre style="word-wrap: break-word; white-space: pre-wrap;"> {
    "title": "Node",
    "items": [
        {
            "label": "Do stuff",
            "icon": "..\/ui\/images\/icons\/16x16\/icon.png",
            "action": "dostuff"
        }
    ]
}</pre>

編集: jQuery 側のコードは次のとおりです。

$.ajax({
    url : "/myproject/getmenu/",
    type : 'GET',
    dataType: "json",
    success : function(data) {
        //alert(JSON.stringify(data,undefined,2));

        if (jQuery.isEmptyObject(data)) {
            return;
        }

        title = data.title;
        items = data.items;

        selected.contextPopup({
            title : title,
            items : items
        });
    }
});
4

2 に答える 2

2

タグを追加するコードはすべて削除する必要があります<pre>。これにより、応答が無効な JSON になり (きれいに印刷するための空白は問題になりません)、解析時に jQuery が失敗します。

JSON 応答がラップされていることについて PHP ドキュメントには何も表示されませんでした<pre>が、フラグなしで試してみることはできます。また、タグが実際に応答に含まれているかどうかも確認します。view-source を使用していて、JSON-pretty-printing ブラウザー拡張機能がインストールされている場合、それはその拡張機能によって追加され、JavaScript コードによって処理される実際の JSON には含まれていない可能性があります。

于 2013-08-23T20:55:25.230 に答える