0

AJAX を使用して PHP ページにデータを投稿していますが、デコードできません。json_decode()NULL を返しました。だから私はそれをエコーするなら、jsonlintを介して実行できると考えました。しかし、何も表示されませんでした。データが PHP ページに到達するかどうかを確認するために、データを試してみましvar_dump()た。奇妙なことに、次のことが示されました。

string(75) "{\"title\":\"fds\",\"body\":\"fds\",\"tags\":\"fds\",\"type\":\"question\"}"

したがって、データはページに到達します。バックスラッシュを削除した後、jsonlint を実行したところ、JSON が有効であると表示されました。これはどのように可能ですか?

var_dump()jsonlintに従って 75 文字の有効な JSON 文字列を取得しましたが、echoそれができませんjson_decode()

編集:
どうやら私は何か間違ったことをしたようです。今それをエコーできます(おそらく$_POST配列キーにタイプミスを犯しました)。これは次のように繰り返されます。

{\"title\":\"tre\",\"body\":\"tre\",\"tags\":\"tre\",\"type\":\"question\"}

繰り返しますが、バックスラッシュがなければ、JSONLint は有効な JSON であることを示しています。

編集 2:
PHP コードは次のとおりです。

// code to check if the user is logged in
$post = json_decode($_POST['q']);
echo "var_dump(\$_POST['q']): ";
var_dump($_POST['q']);
echo "<BR /><BR />";
echo "var_dump(\$post): ";
var_dump($post);    

出力:

var_dump($_POST['q']): string(74) "{\"title\":\"gfd\",\"body\":\"gf\",\"tags\":\"gfd\",\"type\":\"question\"}" 

var_dump($post): NULL

JS コード:

var simpleObj = {title: "rew", body: "rew", tags: "rew", type: "question"};
$.post('savepost.php', "q=" + JSON.stringify(simpleObj), function(data) {
    $('#resultDiv').html("DATA: " + data);
});

最終編集:
最終的に自分で解決しました。私は質問する前から実際に問題を発見しましたが、それは「無害」であり、それがこの問題を引き起こす可能性があるとは考えていませんでした.

4

1 に答える 1

0

答えがわかった!実行するとjsonlint.com、バックスラッシュのために無効であると表示されました。これらは、JSON の引用符を通常の引用符としてマークするためのものであり、文字列の終了引用符と開始引用符ではなく、「無害」であると考えました。
次に、関数addslashes()について考え、逆のものもあるはずだと考えました。私はそれを見つけstripslashes()て、問題を解決しました。

新しいコード:

// code to check if the user is logged in
$post = json_decode(stripslashes($_POST['q']));
echo "var_dump(\$_POST['q']): ";
var_dump($_POST['q']);
echo "<BR /><BR />";
echo "var_dump(\$post): ";
var_dump($post);    
于 2013-01-14T11:59:25.763 に答える