#前提
・Smartyのプロジェクトにアサイン3日目 ※経験・知見共に浅くご容赦ください。
・某求人広告サイト 〇んでぃーどさんのように保存機能を作成中(〇んでぃーどはさんはlocalStorage使用 だが筆者は今回Cookieに保存。この記事はその前の段階の非同期通信のお話です。)
・fetchでサーバー側に値をPOSTし私JSON形式のデータを受け取りたい
#使用環境・技術
・Windows10
・サーバー カゴヤジャパン×Cloudflare
・Smarty2.6.18
・PHP 5.6.34
・JavaScript(Pure JS)
#起きていること及び考察
エラー内容
error
1SyntaxError: Unexpected token < in JSON at position 0
このエラーはPHP側のタイポor構文エラーもしくはJSが見つからないのパターンが多かったのだが
JSはHTMLに直書きのためPHP側の問題ではないかと筆者は推測していた。
POST時Dev toolでNetworkを確認
・200番が表示されている。
・サーバーがCloudflareであることが分かる→試しにxserver(生PHP 7.4 Apache)で試したら今回の要件はうまくいった。
・そもそも生PHPがSmartyのプロジェクトで動かないのでは そう思いググるも最適解に出会えず。
#該当するコード
html
1 <a href="javascript:add_keep('1234')">キープする。</a> 2 3{literal} 4 <script> 5 function add_keep(id){ 6 fetch("get_keep.php",{ 7 method:"POST", 8 headers: { 9 "Content-Type": "application/json" 10 }, 11 body: JSON.stringify({ 12 "keep_id": id 13 }) 14 }) 15 .then(function(response) { 16 console.log("status=" + response.status); //status=200 17 return response.json(); 18 }) 19 .then(function(data) { //返ってきたJSONを出力 20 console.log(JSON.stringify(data)); // 21 }) 22 .catch(function(err) { //失敗時にエラーを出力 23 console.log("err=" + err); 24 }); 25 } 26 </script> 27{/literal}
PHP
1<?php 2 header("Content-type: application/json; charset=shift_jis"); 3 4 $keep_id = $_POST['keep_id']; 5 $res = array("res_id" => $keep_id ); 6 7 echo json_encode($res); 8 exit;
何卒宜しくお願い致します。