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形式で値が入って入れば、問題ないが、どのような値になっているか確認する。
json形式になっていなければ、php側の処理に問題があるのかもしれない。
そこで、php側の処理の中で、デバッグをして見る。
echo, var_dump, print_r などで、値を出力する。
しかし、これが問題になることがある。
phpでjsonを返すとき、echoなどで、json_encodeしたjson形式の値を出力しなければならない。
しかし、出力以前に、echoなどで、値を見ようとした場合、
それがそのまま、js側に渡されてしまう。
つまり、json_encodeされずに渡されるので、
parse errorとなる。
ajaxで別のphpファイルに渡すときも、phpファイル内にscriptを書いて、そこで、受け渡しするときも同様である。