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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1299閲覧

PHPで実行したSQL文の結果を外部のjsファイルに渡したい

rw0710

総合スコア12

PHP

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/05/30 13:34

編集2019/05/30 14:57
  1. 外部のJavaScriptファイルで作ったデータをPHPに送信
  2. PHPで送られてきたデータをもとに,MySQLからデータを取得
  3. 取得したデータを外部のJavaScriptファイルに送信

以上を実現したいと考えています.
現在は,jQueryのajax通信を用いて上記の2のところまで出来ています.

DBに格納されている内容は以下の通りです.
DBの内容

JavaScript

1$.ajax({ 2 type: "POST", 3 url: "xxx.php", 4 data: {data: x} 5 }).done(function( msg ) { 6 console.log(msg); 7 });

php

1$data = $_POST['data']; 2 3$stmt = $pdo->prepare("SELECT `col` FROM `test` WHERE `MapId` = $data"); 4 5$stmt->execute(); 6 7$search_result = $stmt->fetchAll(); 8print_r($search_result[0]['col']);
試したこと

ajax通信のdoneで,phpの結果をJavaScriptファイル内の変数に代入することを試しましたが,
ダメでした.
自分が試したのは以下のものです.

javascript

1var test = ""; 2$.ajax({ 3 type: "POST", 4 url: "xxx.php", 5 data: {data: x} 6 }).done(function( msg ) { 7 test = msg; 8 console.log(msg); 9 console.log(test); 10 });

console.log(msg); の結果は,
{"edges": [{"source": 1, "target": 0}], "nodes": [{"x": 557.5, "y": 200, "id": 0, "title": "new concept0"}, {"x": 557.5, "y": 400, "id": 1, "title": "new concept1"}]}
とJSONのデータを取得することができました.

console.log(test); では何も出力がされないという結果でした.

また,この方法についての解決策は,以下のリンクにありますが,あまり推奨はされていないようでした.
https://teratail.com/questions/14084

他には,外部のJavaScriptファイルの読み出し時に,id属性を記述し,scriptタグに変数を埋め込む
方法を試し,実際に値を取得することはできましたが,今回実現したいものは動的?な値の受け渡しで
これはあまり好ましくありません.

PHP,JavaScriptともに初心者であり,サーバーサイド,クライアントサイドもぼんやりと認識しているような状態ですので,厳しいご指摘でも構いません.どなたかご回答お願いします.

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

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

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

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

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

gentaro

2019/05/30 14:11 編集

ちょっと表現の問題で混乱するんですが、「JavaScriptファイル内の変数に代入」というのは、「JavaScriptのプログラム内で、取得したデータを扱いたい」という意味ですか? そでれあればPHPはあんまり関係ないというか… ・取得されたデータがどのようなものか(形式、具体例など) ・「代入することを試しましたが,ダメでした」とは何を試して、何がダメなのか(エラーであればメッセージ等) ・「調べたところ推奨はされていないようでした」とは具体的に何? あたりを記載された方が良いと思いますが。
rw0710

2019/05/30 14:33

すみません.説明不足でした. JavaScriptからMapIdをPHPに渡し,colを取得(JSON形式) 取得したJSON形式のデータを,もとのJavaScriptで扱いたいという意図です. ご指摘いただきありがとうございます.
kei344

2019/05/30 14:35

「外部のJavaScript」を提示してください。
rw0710

2019/05/30 14:38

「外部のJavaScript」というのはこのajax通信を行なっているものです. PHPファイルと,JavaScriptファイルを別にしているため外部という表現をしていました.
gentaro

2019/05/30 14:49 編集

質問の主体がその「JavaScriptのプログラム」なので、「外部」などと言ってしまうと混乱しますよ。 あと「ファイル」というと、「ソースコードが書かれている実体としてのファイル」が思い浮かぶので、この場合わざわざ「ファイル」という表現をされるのは適さないと思います。(少なくとも一般的じゃないです) で、内容についてですが ・「代入することを試しましたが,ダメでした」とは何を試して、何がダメなのか(エラーであればメッセージ等) についての言及がなく、何がどうダメだったのかわかりません。 なんとなくですが、DBのcolという列にJSONのデータが入っているなら、SELECT * ではなくSELECT col で取得するべきな気はしますが…。 console.log(msg); の出力結果はどうなっていますか?
rw0710

2019/05/30 14:59

ありがとうございます.非常に勉強になります. ソースコード,出力結果ともに修正いたしました.質問当初SQL文などはあまり問題視していなく,具体的な内容もあまり記載したくなかったため,曖昧な表現のまま質問をしてしまいました. 申し訳ありません.
guest

回答1

0

ベストアンサー

質問欄でのやりとりを踏まえ、

・PHP側は目的のデータを正しく返している
・JavaScript側も通信は上手くいっており、JSON文字列のデータの取得まではできている

と仮定して疑問にお答えすると、

また,この方法についての解決策は,以下のリンクにありますが,あまり推奨はされていないようでした.
https://teratail.com/questions/14084

ここで言及されている推奨されない行為、というのは「グローバル変数に格納する」の事だと思います。

要するに「done」の処理内でデータを取得できているのであれば、単純にそこで(またはそこから呼ぶ関数に渡して)、JSONをパースして使えば良いと思いますが。

元コードをなるべくそのままにするなら

JavaScript

1$.ajax({ 2 type: "POST", 3 url: "xxx.php", 4 data: {data: x} 5 }).done(function( msg ) { 6 var obj = JSON.parse(msg); 7 // 以下、objを使った処理... 8 console.log(obj.edges[0].source); // とか 9 // 長くなるなら別関数に渡すとか 10 xxxfunc(obj); 11 });

でどうでしょうか?

投稿2019/05/30 15:20

編集2019/05/30 15:45
gentaro

総合スコア8949

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

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

rw0710

2019/05/31 00:06 編集

申し訳ありません.コメントが遅くなりました. リンク先について,回答者様のおっしゃる通りだと思います.認識を誤っていました. コードについてですが,提示して頂いたもので出力を得ることができました. また,本来の質問内容以外のところでもご指摘いただき勉強になりました. ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問