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

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

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

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

3回答

1438閲覧

JavaScriptで動的に生成した配列をphpで取り出したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/06/24 00:02

編集2021/06/24 02:14

クリックイベントで動的に配列を生成しています。
様々なサンプルを試しているのですがうまく取得できません。

JavaScript

1 $( '.detail' ).on('click', function(e) { 2 e.preventDefault(); 3 val = $(this).attr('value'); 4 // 多次元配列から新たに配列を生成 5 var newLine = data.filter(function(item, index){ 6 if (item.No == val) return true; 7 }); 8 console.log( '対象製品データ配列',newLine ); 9 10 var aryJSON = JSON.stringify(newLine); 11 var json = { a: aryJSON }; 12   $.ajax({ 13    type: 'POST', 14    url: 'http://localhost/Detail.php', 15    dataType: 'json', 16    data: json, 17   }).done(function(data) { 18    console.log( '成功' ); 19   }).fail(function(XMLHttpRequest, textStatus, errorThrown) { 20    console.log( 'NG' ); 21   }) 22 23 });

php

1<?php 2 $data = filter_input(INPUT_POST, 'a'); 3 $array = json_decode( $data , true ) ; 4 print('<p>' . $array['No'] . '</p>'); 5?>

補足:各配列の中身は以下の様になっています。(コンソールより)
元の配列:data
0: {No: "57", MakerID: "1", Maker: "Axis", TypeID: "1", Type: "室内 固定カメラ", …}
1: {No: "58", MakerID: "1", Maker: "Axis", TypeID: "3", Type: "室外 固定カメラ", …}
2: {No: "235", MakerID: "1", Maker: "Axis", TypeID: "8", Type: "組込型", …}
3: {No: "236", MakerID: "1", Maker: "Axis", TypeID: "8", Type: "組込型", …}
4: {No: "286", MakerID: "1", Maker: "Axis", TypeID: "5", Type: "室外 パンチルトズーム", …}
5: {No: "287", MakerID: "1", Maker: "Axis", TypeID: "5", Type: "室外 パンチルトズーム", …}

新たに生成した配列:newLine
[{…}]
0:
ActiveTamperingAlarm: "いたずら警告"
Audio: "双方向"
AudioDetection: "音声検知"
CarPic: "images/button/lamp_off_car.png"
ColorLux: "0.2"
DayNight: "○"
DayNightPic: "images/button/lamp_on_dayNight.png"
Maker: "Axis"
MakerID: "1"
MakerPrice: ""
MicrophonePic: "images/button/lamp_off_microphone.png"
Models: "P3367-V"
ModelsExt: ""
MonoLux: "0.04"
No: "57"   ・・・

json配列:json
a: "[{"No":"57","MakerID":"1","Maker":"Axis","TypeID":"1","Type":"室内 固定カメラ\  ・・・

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

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

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

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

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

guest

回答3

0

var newLine = data.filter

dataが定義されていないのでは?

投稿2021/06/24 00:53

yambejp

総合スコア116835

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

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

退会済みユーザー

退会済みユーザー

2021/06/24 00:59

せやな
退会済みユーザー

退会済みユーザー

2021/06/24 01:06

配列を生成する際に定義しているのですが・・これでは違いますか?
退会済みユーザー

退会済みユーザー

2021/06/24 01:10

クリック前のphp側にてデータベースから取得しています。($json_array) それをphp側から送信しています。 var data=JSON.parse('<?php echo $json_array; ?>');
yambejp

2021/06/24 01:16

> var data=JSON.parse('<?php echo $json_array; ?>'); 今度は$json_arrayってなんですか?ってなりそうですね ご自身の環境でしか確認のできないことをさらに ソースから削って質問されても回答できる人間はいないかと・・・
退会済みユーザー

退会済みユーザー

2021/06/24 01:27 編集

配列はコンソールにて確認できている上コンソール内容を記載しているので不要と思いました。 ご指摘ありがとうございました。
yambejp

2021/06/24 01:43

aには[{・・・,No:"57"}]のようなデータが入ります デコードするとベースは配列になるので参照方法がおかしいです $data = filter_input(INPUT_POST, 'a'); $array = json_decode( $data , JSON_OBJECT_AS_ARRAY) ; print '<p>' . $array[0]['No'] . '</p>'; いまの渡し方だと最低でも配列の番号が入るはずです
yambejp

2021/06/24 01:47

また、val = $(this).attr('value'); が、いまいち何をしたいのかわかりません detailクラスがついたボタンか何かがあるのでしょうか?
退会済みユーザー

退会済みユーザー

2021/06/24 02:04

はい、ボタンのvalue値です。 クリックイベントでボタンのvalue値により、多次元配列dataを検索し、新たに配列newLineを生成しています。(この説明であっていますか?)
退会済みユーザー

退会済みユーザー

2021/06/24 02:19

各配列の動きを補足にコンソールより転載してみました。 $data = filter_input(INPUT_POST, 'a'); $array = json_decode( $data , JSON_OBJECT_AS_ARRAY) ; print '<p>' . $array[0]['No'] . '</p>'; まだ取得できませんでした。
yambejp

2021/06/24 07:39

退会するほど回答が気に入らなかったのでしょうか・・・反省
guest

0

newLineはArray型なのでは?filterメソッドを使っているので戻り値はArrayのはず。
で、それをjson文字列にして{ a: "[...]" }として送っているのですよね?
であれば受け取るPHP側は以下になるはず。

<?php $data = filter_input(INPUT_POST, 'a'); $array = json_decode( $data , true ) ; var_dump($array); // こっちの方が型も確認できるのでおすすめ print('<p>' . $array[0]['No'] . '</p>'); ?>

投稿2021/06/24 00:48

deo_deo

総合スコア198

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

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

退会済みユーザー

退会済みユーザー

2021/06/24 00:58

回答ありがとうございます。 おっしゃるとおりarray型です。php側は直してみましたが、ajaxがまだ通らないので確認がとれていませんが。。
deo_deo

2021/06/24 01:03

ん?ajaxが通らないというのはあのソースコードでという事でしょうか? おそらく永遠に通らないでしょう。 dataType: json を指定しているにも関わらず、htmlコードをphpは返しているので永遠にエラーになると思います。 dataType: html にすればとりあえず通るかもしれません。(ブラウザによって挙動が違うのでエラーになるやつもあるかもしれませんが) あとは、php側でheaderを指定しましょう。 ajax php headerで調べると出てくると思います。 基礎知識をしっかり学べば自ずと解決できると思います。
退会済みユーザー

退会済みユーザー

2021/06/24 01:07

ありがとうございます。試してみます。
退会済みユーザー

退会済みユーザー

2021/06/24 01:14

ちなみにヘッダーは割愛しただけで記述はしてあります。
退会済みユーザー

退会済みユーザー

2021/06/24 01:25

var_bumpはNULLとなってしまいましたが、回答頂いたajaxの修正で通りました!ありがとうございます。
deo_deo

2021/06/24 01:26

がんばってb
退会済みユーザー

退会済みユーザー

2021/06/24 01:47

ありがとうございます。
guest

0

jQuery.ajax() | jQuery API Documentation
Ajaxでpost送信 - Qiita

post送信するdataの与え方が色々間違っているので、
示した記事を参考に直してみてください。
data: json,
で、変数jsonに納まっているJSON文字列を送信しそうな気がします。

投稿2021/06/24 00:11

編集2021/06/24 00:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/06/24 00:29 編集

回答ありがとうございます。 添付頂いたページも以前に試したのですが、もう一度やってみました。 コードを書き変えてあります。 こちらではやはり通りませんでした。
退会済みユーザー

退会済みユーザー

2021/06/24 00:38

で、php側で、試しに var_dump($_POST); してみればいいです。
退会済みユーザー

退会済みユーザー

2021/06/24 00:59

試してみましたがそもそもajaxが通りません。。
退会済みユーザー

退会済みユーザー

2021/06/24 01:03

yambejpさんの回答での指摘の件も併せて、 var newLine = data.filter() のdataってどこから来てますかねと。
退会済みユーザー

退会済みユーザー

2021/06/24 01:10

クリック前のphp側にてデータベースから取得しています。($json_array) それをphp側から送信しています。 var data=JSON.parse('<?php echo $json_array; ?>');
退会済みユーザー

退会済みユーザー

2021/06/24 01:22

その var data とスコープが違うので、 このクリックイベント内には存在しないのではないかと。 data.filter() を書く直前にでも、console.log()とかでdataの中身をチェックしたら中身はありますか?
退会済みユーザー

退会済みユーザー

2021/06/24 01:30

はい、確認できます。 0: {No: "57", MakerID: "1", Maker: "Axis", TypeID: "1", Type: "室内 固定カメラ", …} 1: {No: "58", MakerID: "1", Maker: "Axis", TypeID: "3", Type: "室外 固定カメラ", …} 2: {No: "235", MakerID: "1", Maker: "Axis", TypeID: "8", Type: "組込型", …} 3: {No: "236", MakerID: "1", Maker: "Axis", TypeID: "8", Type: "組込型", …} 4: {No: "286", MakerID: "1", Maker: "Axis", TypeID: "5", Type: "室外 パンチルトズーム", …} 5: {No: "287", MakerID: "1", Maker: "Axis", TypeID: "5", Type: "室外 パンチルトズーム", …} といった具合です。
退会済みユーザー

退会済みユーザー

2021/06/24 01:34

それならば、var newLine にはdata.Filter()したのが適切に入ってきている? なんかリモートデバッグしているような気分、、 変数やオブジェクトの中身を一手ずつ確認してほしい、指摘される前に。 そしてどこでどうなってておかしくなってると、第三者にわかるように情報をまとめて伝えてほしい。
退会済みユーザー

退会済みユーザー

2021/06/24 01:44

補足部分に記載しているコンソールの転載の内容で正しくfilterされています。 ajaxが通らなかったので質問をした次第です。ajaxについてはdeo_deoさんのご回答にて通るようになりました。 皆様配列に関して頂くのですが、タイトルが悪かったようです。説明不足で申し訳ありません。
退会済みユーザー

退会済みユーザー

2021/06/24 01:46

var_dump($_POST); してみればいいです、って助言が無視されたので、てっきりjs側かと。
退会済みユーザー

退会済みユーザー

2021/06/24 02:09

失礼しました。ajaxが通るようになってから試したのですが、var_dump($_POST);の結果がarray(0) { }となってしまっていました。 他の回答者様のコードをためしていたりして私のお返事の遅れです。申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問