2

OK、私はこれに夢中になっています。PHPからJSONを出力していますが、ChromeとFirefoxの両方のJSONView拡張機能が無効であると主張しています。どちらの拡張機能もJSONビューの例では正しく機能するため、実際にJSONに何か問題があるようですが、何が原因かわかりません。

Firefoxバージョンにはエラーメッセージがあります:

There was an error parsing the JSON document. The document may not be well-formed.

Chromeバージョンにはそのようなエラーメッセージはありませんが、JSONをプレーンテキストとして出力します。

次のようにヘッダーを設定してheader('Content-Type: application/json');います。FirebugとChromeの開発ツールで応答ヘッダーを確認しました。どちらの場合も正しく設定されています。これを削除すると、Firefoxバージョンのエラーメッセージが非表示になり、プレーンテキストは等幅フォントではなくなりますが、それだけです。

完全なリクエストヘッダー:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:msgPublishID=1347362550,1345649049; logout_rem=1; sh_rand=625703e7f9f9e03efabaef56f52ff97d7f68bc67; username=kryan; password=f85720746a490ece4dd7a945f5c9ed8e25b15f1f; fullname=Kevin+Ryan; user_type=1
Host:localhost
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1

完全な応答ヘッダー:

Connection:Keep-Alive
Content-Length:371
Content-Type:application/json
Date:Thu, 27 Sep 2012 19:12:52 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4
X-Powered-By:PHP/5.4.4

私はJSON自体に多くのバリエーションを経験しましたが、これほど単純なものの場合、JSONの問題であるとは想像できません。

{"session":"expired"}

まだ失敗しています。私は繰り返しチェックしました。これは文字通りサーバーの応答全体ですが、JSONビューは依然として文句を言います。より複雑なJSONについては、私は使用してきました

echo json_encode($output, JSON_PRETTY_PRINT);

ここ$outputで、は連想配列です。出力は完全に正しく見えますが、JSONビューはまだ文句を言っています。これは、echoコメントアウトされていないファイル内の唯一のものです。

では、いったい何がここでうまくいかないのでしょうか?本当にJSONビューが必要です。私は非常に大きなJSONを常に使用しており、オブジェクトと配列を折りたたんだり展開したりする機能は、アプリケーションのデバッグに不可欠です。このオンラインJSONビューアは機能しているようですが、テストするたびにこれらのPHPファイルの出力をコピーして貼り付ける必要がある場合、生産性が低下します。

編集:私がうまくいくことを私が見つけた1つのことは私がこれをするかどうかです:

<?php
    header('Content-Type: application/json');
    die('{"debug":true}');
    // remainder of the program as-is, starting with...
    require('dbinfo.php');

私がこれで行くなら:

<?php
    header('Content-Type: application/json');
    require('dbinfo.php'); // note this comes before the die statement
    die('{"debug":true}');
    // remainder of the program as-is

再びエラーが発生します。

したがって、これはそれdbinfo.phpが問題を引き起こしていることを意味します。

編集:申し訳ありませんが、dbinfo.php公開してはならない機密データが含まれている可能性があるため、この質問から削除しました(明らかなものを削除しましたが)。の内容dbinfo.php関連性がなかったので、削除する方が安全なようです。以下の私の答えを参照してください。

4

1 に答える 1

1

ああ。

私はそれを理解しました:BOMは物事を台無しにしていました、しかしもちろんそれはまた完全に見えませんでした。エンコーディングをチェックして、BOMなしでUTF-8に変更すると、問題が完全に修正されました。

このBOMがPHPの設計に問題があるのか​​、Unicodeの設計に問題があるのか​​はわかりませんが、確かに不快です。

于 2012-09-27T21:13:04.630 に答える