2011-10-17 4 views
0

で設定されていない私は、検証後に実行される次のPHPコードを持って入力しコンテンツが正しくPHPスクリプト

 # header encode 
     header('Content-type: application/json'); 
     # return json encoded data 
     echo $encoded = json_encode($msg); 

このような直接的な配列以下は正常に動作します。

header('Content-type: application/json'); 
$msg['error'] = true; 
$msg['msg'] = 'Please enter an email address.'; 
echo $encoded = json_encode($msg); 

私のPHPロジックの問題は何か分かりません。親切に助けてください。

+0

エラーは何ですか? – evasilchenko

+0

エラーメッセージはありますか?コンテンツタイプはどのように設定されていますか?あなたがそのURLを見るとどうなりますか? – Ryre

+0

これは問題ではありませんが、 'echo json_encode($ msg)'が '適切'であるようにしてください。あるいは、1行に代入を行い、変数を別の行にエコーします。 –

答えて

0

私が見ることのできる唯一の違いは、動作するバージョンでは の前にと呼ぶことです。

はのtry/catch上

header('Content-type: application/json'); 

を移動してみてください。私はこの問題が発生した理由は、あなたが暗黙のうちに配列$msgにアクセスして、E_NOTICEをスローする(またはE_STRICTかもしれない、私は覚えていないかもしれないが)何かが書き込まれるこのような場合にはJSONも破損すると思いますが...。

これに関係なく、上記を試してレポートしてください。

+0

私は 'header()'部分をtry/catchの上に移動しようとしましたが、まだ運がありません。暗黙のうちにヘッダーを送信するコードがいくつかあるようです。私は同じスクリプトにファイルをインクルードしています。これが原因だろうか? – gabeno

+0

あなたが探しているのは、出力を引き起こすものです。そのため、出力バッファにデータを書き込む 'echo'、' print'、 'print_r'などの呼び出しがあります(これを行う多くの他の関数がありますが、 'system'のようなものです)、エラーを引き起こすもので、エラーメッセージが表示されます。ヘッダーが送信されたかどうかは、['headers_sent()'](http://php.net/manual/en/function.headers-sent.php)関数を使って調べることができます。 – DaveRandom

+0

私はついにそれを理解しました。私はjsonが返されることを許さないと評価していたコードのどこかに条件がありました。あなたの洞察に感謝します。 – gabeno

関連する問題