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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

JavaScript

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

Q&A

解決済

3回答

568閲覧

jsonencodeした連想配列をphpで変数として処理したい

momolength

総合スコア62

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2021/06/08 01:59

編集2021/06/08 10:35

1.やりたいこと
select1で選択された項目を基準にその下に設置しているselect2の項目を変えたい。
2.そのために
select1で選択された項目をjsで取得、jsonとしてcontrollerへ投げ、そのidを基準にselect2用のデータをDBから取得、$responseに格納しechoで戻す。
3.それを(本件の問題点)
jsで取得 or phpで取得し、select2のデータを表示させる。

です。

この2の流れを下記に記載します。

triggerを記述したのは、初期表示の時点で処理を実行したいためです。

ajax

1 var id = $(this).val();//指定のid 2$.ajax({ 3type: 'GET', 4url: '対象actionへ渡す(ajax_id)', 5data: { 6 idd: id, 7}, 8dataType: 'json',

↓ これをcontrollerに渡し、encodeします。

public function ajax_id { $data = array(); $response = array( 'data' => array() ); $id = $this->request->query['id']; //$idを基準にfindでデータ取得(連想配列) $response['data']['hairetuList'] = $hairetuList; } echo json_encode($response); }

ここが3となります。
decodeというのを試しましたが、$arrayをphpでダンプしてもnullがかえってきます。

php

1<?php $array = json_decode($response['data']['hairetuList']); ?>

しかし、上でも書いた通りjsでconsole.logにて表示させた場合、objとして取得できていました。

jsで変数に格納し、それをphpで表示させればやりたいことができる想定です。
しかし、jsで格納のやり方がわからず。
教えていただけますか?

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

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

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

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

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

m.ts10806

2021/06/08 02:03 編集

このコードだけで的確な回答できる人はいません。 json_decodeというJavascriptのメソッドの定義を提示し、PHPのコードや投入したデータ全部提示すればまだ答えようがあります。 赤の他人しか見ていないという認識は持ちましょう。
退会済みユーザー

退会済みユーザー

2021/06/08 02:17

php文法とjs文法がごっちゃ混ぜすぎて、どこになんのコードを書いてどんな結果を招いているのか想像もつかない。
退会済みユーザー

退会済みユーザー

2021/06/08 02:25 編集

encodeって言語はなに? 素のphpではなさそうね。
momolength

2021/06/08 02:30

>encodeって言語はなに? これはcontrollerで処理しているものです。 findと書いておいたので端折りました。 そこらへんも追記しておきますね。
guest

回答3

0

$array = json_decode(response.data.rensouList);

javascriptにはjson_decodeという関数は予め用意されていません
JSON.parseでは?
(ただしresponse.data.rensouListが正しいJSONデータである保証が必要)

投稿2021/06/08 02:09

yambejp

総合スコア114996

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

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

退会済みユーザー

退会済みユーザー

2021/06/08 02:14

その理屈で行くと、$arrayのように$をつけるのはphpな文法なので、 質問者さんがphpを書いているのかjsを書いているのか混乱しているとしか思えない。
yambejp

2021/06/08 02:19

$array = json_decode(response.data.rensouList); ってjavascript側でやってる処理じゃないのでしょうか? ご自身で「javascript」と明示していますけど・・・
momolength

2021/06/08 02:22

そうですね、ちょと分からなくなっていました。decodeはphpでやるものですよね。 もう一度質問文を修正したのでお願いします。
yambejp

2021/06/08 02:35

PHPでAPIを用意しエンコードしたデータを非同期でjsが受け取って デコードはjs側が行います もちろんPHPでデコードもできますが、デコードしてしまったら jsとのデータ受け渡しができませんので
momolength

2021/06/08 03:03

そうなんですね。 ajax → php(整形後encode) → js(decode & 変数に入れる) → php(変数としてダンプできる)という流れですかね?
yambejp

2021/06/08 03:08

js(ajax/fetch)=パラメータ送信&要求→PHP:処理→データをjson_encodeして返信→js受け取ったjsonデータをオブジェクト、配列、プリミティブな値にパースして利用 という感じですかね
momolength

2021/06/08 03:23

ご丁寧にありがとうございます。すみません、わからなくて。 >パースして利用 やはり、js側でphpに渡す用の変数を定義する方法があるということですよね。これがわからず、decodeしたものをphpでやるのかjsでやるのかわからなくなったという経緯があります。 何から何までで申し訳ないんですが、この方法はどうやりますか?
yambejp

2021/06/08 04:15

$a=["hoge"=>[1,2,3],"fuga"=>null]; var_dump($a); print "<hr>\n"; $b=json_encode($a); var_dump($b); print "<hr>\n"; $c=json_decode($b,JSON_OBJECT_AS_ARRAY); var_dump($c);
退会済みユーザー

退会済みユーザー

2021/06/08 04:19

受け取ったjsonデータを壊さず、応答用のデータを加えて返すってのを組みたい、と?(今わかった
momolength

2021/06/08 08:41

>$b=json_encode($a); var_dump($b); print "<hr>\n"; $c=json_decode($b,JSON_OBJECT_AS_ARRAY); すみません、遅れました。 これは、phpでencodeして、jsでパースして利用とは異なりますよね。 phpでdecodeしてそれを変数に入れてると。しかし、これを実行してもNULLが帰ってきてしまいました。やはり、echoしたものはjsでしか受け取れないのでは?
momolength

2021/06/08 08:45

>受け取ったjsonデータを壊さず、 echo したresponseはjsでconsole.logで出力して確認した所壊れて?おらず、問題なく取得できていました。 >応答用のデータを加えて返すってのを組みたい、と?(今わかった はい、その通りです。要所だけ書いていたのがまずかったですね。質問文に追記します。
guest

0

phpはサーバー上で動作していて、phpの実行が終わってwebブラウザで表示される頃にはphpの実行は終わってます。
それとも、jsからajaxでphpにデータを送信する場面を想定していますか?

それならPOST送信してくれれば、phpでも$_POST['hoge']などとして受信できて、
それがjson文字列であればjson_decode()でデコードできます。

投稿2021/06/08 02:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

momolength

2021/06/08 02:06

ajaxにて、postができず、getであれば$this->request->queryで取得できたので、それで処理をしresponseで返しました。 console.logでresponseを確認した所、オブジェクトとして連想配列が入っているので、いけてると思ってたんですが...。 質問、追記したので見ていただけますか。
退会済みユーザー

退会済みユーザー

2021/06/08 02:09 編集

$responseって誰がどこで宣言してデータを代入しているのか、説明してくださいね。 (ミニマルなテストコードを示してくれれば、こちらでも動かして試すことはできますが、一部分では質問者さんの説明が頼りです。)
momolength

2021/06/08 02:14

わかりました。少々お待ちください。
guest

0

自己解決

jsで取得した時点で、phpへ再表示させることはサーバーサイドを行き来することとなり、要件の時点でNGだとわかりました。
js内で処理をし、appendにて要素を追加することで解決しました。
次回から質問文に要件と実行した結果の詳細を記述します。

投稿2021/06/08 10:36

momolength

総合スコア62

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問