phpからjsにjsonを渡したとき、parse error になる ajax

jsonを渡されて、処理をして、返す側のphpでは、echoなどで、jsonを出力しなければならないので、

それ以前に、処理の途中などで、echo, var_dump, print_rなどを使ってはいけない。

というところで、つまづいたので記録。

 

jsからphpにデータを渡すときは、jsonを利用します。

jQuery1.8以前では、ajaxなどで使う例外処理に

success, error, complete を使い、phpから送られてきたjsonを処理をしていました。

それ以降は、done, fail, always になりました。

 

https://medium.com/@bbxxuw/jquery-ajax%E3%81%AEsuccess-error-complete%E3%81%AF%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%A3%E3%81%A6%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%9F-797da1b8adc7

 

その処理の中で、phpからjson_encodeで、jsにjsonを返すとき、エラーになって、

parse errorと出た場合、ほとんどが、json形式となっていないことが多い。

まずは、phpから出力された値を、json形式かチェックしてみるといい。

https://lab.syncer.jp/Tool/JSON-Viewer/

 

json形式で問題なければ、他の原因を考える。

エラーメッセージの内容から推察する。

ブラウザの開発者ツールで、js側のjsonを受け取る処理を見てみる。

ステップ実行をして、errorが出ているところを見る。

XMLHttPRequestというのがあるので、そのオブジェクトの

status , statusText, Responseなどの値を見る。

errorを受けたところで、console.log(XMLHttpRequest.status);

とすれば、内容を見ることができる。開発者ツールにある内容と同じ。

responseには、json形式で値が入って入れば、問題ないが、どのような値になっているか確認する。

 

【ajax】通信エラーとなった原因の取得方法

 

json形式になっていなければ、php側の処理に問題があるのかもしれない。

そこで、php側の処理の中で、デバッグをして見る。

echo, var_dump, print_r などで、値を出力する。

しかし、これが問題になることがある。

phpでjsonを返すとき、echoなどで、json_encodeしたjson形式の値を出力しなければならない。

しかし、出力以前に、echoなどで、値を見ようとした場合、

それがそのまま、js側に渡されてしまう。

つまり、json_encodeされずに渡されるので、

parse errorとなる。

 

ajaxで別のphpファイルに渡すときも、phpファイル内にscriptを書いて、そこで、受け渡しするときも同様である。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です