質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1921閲覧

JavaScriptのオブジェクト(連想配列)をajaxを利用してPHPで受け取る

SugiuraY

総合スコア318

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/10/01 08:24

以下のようにオブジェクトを含む配列をJson形式でPHPに渡しているのですが、オブジェクトの'name'キーの値にアクセスすることができません。具体的には//hereの箇所で空白が返されてしまいます。

実際にはajaxで.done()の結果を得たいというのではなく、php側でオブジェクトの特定のキーにアクセスして操作をしたいのですが、php側でjson_decode($get_data)したうえで、$get_dataを返すとNull値が返ったり、やり方がわかりません。

どなたかアドバイスを頂けると幸いです。

javascript

1var data = []; 2var year = [2000,2001,2002]; 3var obj = {}: 4obj.name = "suzuki"; 5obj.age =33; 6 7data.push(year); 8data.push(obj); 9/* 10data=[[2000,2001,2002],{name:'suzuki',age:'33'}] 11*/ 12 13 $.ajax({ 14 url:'ajax.php', 15 method:"POST", 16 data:{ 17 'ip':'<?=$_SERVER["REMOTE_ADDR"]?>', 18 'data':data 19 }, 20 dataType: "json" 21 }).done((get_data, textStatus, jqXHR)=>{ 22 console.log(get_data);//here 23 })

php

1<?php 2$get_data = filter_input(INPUT_POST,'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); 3header("Content-type: application/json;charset=UTF-8"); 4echo json_encode($get_data[1]['name']); 5//echo json_encode($get_data); この場合、きれいにそのままオブジェクトを含む配列を返してくれる 6?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

結局suzukiが得られればいいのでしょうか?

script.html

javascript

1var data = []; 2var year = [2000,2001,2002]; 3var obj = {}; 4obj.name = "suzuki"; 5obj.age =33; 6 7data.push(year); 8data.push(obj); 9console.log(data); 10const url="ajax.php"; 11const body=new FormData(); 12body.append('data',JSON.stringify(data)); 13fetch(url,{method:"post",body}).then(res=>res.text()).then(console.log);

//ajax.php

PHP

1<?php 2$get_data = filter_input(INPUT_POST,'data'); 3header("Content-type: application/json;charset=UTF-8"); 4echo json_decode($get_data)[1]->name;

投稿2021/10/01 08:44

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2021/10/01 14:17

コメントありがとうございます。 JSON.stringify()してからPHPに渡してあげて、json_decode()することができました!また調べていく過程でjson_decode()の第二引数にtrueを設定することで連想配列として値にアクセスできることもしれました! お力添え、ありがとうございました。
guest

0

ただしいjson形式にしたほうがよさそうです

json

1{ 2 "year": [ 3 2000, 4 2001, 5 2002 6 ], 7 "name": "suzuki", 8 "age": "33" 9}

そうすればjson_decodeできます

投稿2021/10/01 08:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2021/10/01 14:15

コメントありがとうございます。 いくつか、考え方に誤りがありうまく実装することができなかったのですが、yambe様の回答との合わせ技でうまくいきました。 ①まず、ajaxでデータを送る際に、オブジェクト形式のまま送っても、PHP側でdecodeができず、JS側でJSON.stringify()する必要がありました。 ②また、PHP側でget_data[1]['name']で何度やっても、その値にアクセスできずに悩んでいたのですが、 ->nameというクラスのような形で指定するかPHP側のjson_decode()の第二引数にtrueを設定しなければ連想配列のように扱えず、アクセスすることができない これらの答えにたどり着くのに何時間もかかってしまいました。。。 ただ、ご助言ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問