質問させてください。
やりたいことはPHPでJsonを書き出すなんですが、
json_encodeでNULLが返ってきます。
コードPHP側
<?php // 画面から送られたきた値 $id = filter_input(INPUT_POST, 'id'); $idd = filter_input(INPUT_POST, 'idd'); $list = array("id" => $id, "name" => $idd, "hoge" => "ほげ" ); // 明示的に指定しない場合は、text/html型と判断される header("Content-type: application/json; charset=UTF-8"); //JSONデータを出力 echo json_encode($list, JSON_UNESCAPED_UNICODE); exit;/* */
コードJavascript側
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- jQueryの読み込み (これがないと動かないよ) --> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <title>Ajax Sample1</title> </head> <body> ID : <input type="text" id="id" /> ID : <input type="text" id="idd" /> <button id="btn">SEND</button> <div><br></div> <div id="res">戻り値が表示される</div> <script> $(function(){ // ボタンがクリックされたら $("#btn").on("click", function(event){ // 入力されたID値を取得 id = $("#id").val(); idd = $("#idd").val(); $.ajax({ type: "POST", url: "ajax.php", data: { "id":id, "idd":idd}, dataType : "json" }).done(function(data){ console.log(data) <!--console--> $("#res").text(data.id+' : '+data.name+' : '+data.hoge); }).fail(function(XMLHttpRequest, textStatus, error){ alert(error); }); }); }); </script> </body> </html>
ページ側では反映されているのでこちらどの様にしてPHP側の
エンコード(NULL)を解消させるかお教えいただけないでしょうか?
私、PHPが初心者で申し訳ございません。
PHP側でも、JSONを取得したいのですがお教えいただきたく存じます。
送信してる側もURLではなくソースコードで質問本文に提示してください。
Chrome拡張(PostMan)でAPIとして実行してみましたが、そちらもNULLになるのでおそらくPHP側の問題です。
ただ、ちなみに提示されたコードでローカルにて実行しましたがちゃんと返ってきました。
aaa : bbb : ほげ
PHPが質問本文に提示されたそのままではないとかでは?
ありがとうございます。
PHPがほぼ素人なもので、申し訳ございません。
javascriptのコードを追記いたしました。
いろいろと調べているのですが、 $id = filter_input(INPUT_POST, 'id');の
filter_inputが問題ではないかというところまで来たのですが、
filter_inputをグローバル変数からローカル変数に変更の仕方などを探っております。
filter_input(INPUT_POST, 'id');
の中にグローバル変数も何も変数がないです。
第一引数は定数。
ただ、いずれにしてもPHPもHTMLも提示のコードで入力値が返ってきてました。
ちなみにdoneにて変数dataをconsole.log()するとどうなりますか?
あと、INPUT_GETにしてブラウザからajax.php?id=aaa&idd=bbbのようにアクセスしたらどうなりますか?
問題切り分けのための検証コードです。
ありがとうございます。console自体は問題なく動いてました。
こちらが結果となります。
Objecthoge: "ほげ"id: "aaa"name: "aaa"[[Prototype]]: Object
>INPUT_GETにしてブラウザからajax.php?id=aaa&idd=bbbのようにアクセスしたらどうなりますか?
こちらに関しても問題なくでした。
コンソールの画面キャプチャいただけますか?
こちらの手元で動いている以上はコード自体に間違いがあるようには思えませんが、「こちらが結果となります」と提示された中にiddがないのは不思議なので(一部だけ切り取られているような気がしないでもない)
すいません、わたくしがPHP側でnameにしてしまってました。
console画像を追加いたしました。
これはどこに書いたconsole.logですか?
質問本文のコードを更新してください
申し訳ございません。書いたのはdoneの後になります。
}).done(function(data){
console.log(data) <!--console-->
$("#res").text(data.id+' : '+data.name+' : '+data.hoge);
}).fail(function(XMLHttpRequest, textStatus, error){
alert(error);
});
上記のコードに追加しております。
全角スペース入ってますが、エラー出ませんか?
console.log(data)[ ]<!--console-->
[] のところ


