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

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

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

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

JavaScript

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

Q&A

解決済

2回答

2861閲覧

JavaScriptのFetchでPHPから変数を取得したいです。

9nahito

総合スコア45

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2021/12/12 08:32

JavaScriptのFetch APIでphpにPOSTする方法は見つけて無事動作しました。
とりあえずPOSTをGETに変えてみたのですが、phpから何も取得出来ませんでした。
JavaScriptのFetchでPHPの変数($data)を取得するにはどうすればよいですか?
Fetch APIでPHPにデータを送信する
PHPにJavaScriptから値(999)をPOSTするコード------------------

javascript

1 let postData = new FormData; 2 postData.set('num',999); 3 const data = { 4 method: 'POST', 5 body: postData 6 }; 7 fetch('phpファイルのパス',data)

php

1 $data = $_POST['num']; 2 //その後は$dataをredisというdbにkey01として渡し、redis上で999が渡されたことを確認しました。 3 $redis = new Redis(); 4 $redis->connect("127.0.0.1",6379); 5 $redis->set('key01',$data); 6 $test = $redis->get('key01'); 7 print $test;

試したphpからFetchで変数をGETするコード
以下のサイトを参考にしたのですが、jsonをGETする方法しかなかったのでPHPの変数($data)をGETする方法はわかりませんでした。
JavascriptによるHTTPリクエスト
下のjavascriptを.htmlにjavascript要素で書き込んで実行したのですが、何も表示されませんでした。

javascript

1 fetch('phpファイルのパス', { 2 method: "GET", 3 mode: "cors" 4 }) 5 .then(response => { 6 if (response.ok) { 7 return response.text(); 8 } 9 // 404 や 500 ステータスならここに到達する 10 throw new Error('Network response was not ok.'); 11 }) 12 .catch(error => { 13 // ネットワークエラーの場合はここに到達する 14 console.error(error); 15 })

php

1 $data = $_POST['num'];

回答よろしくお願いします!

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

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

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

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

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

guest

回答2

0

ベストアンサー

Fetchでもなんでもですけど、PHPの変数をそのまま利用するわけではなく、PHPから返却された文字列をJavaScriptで利用することになるので、「変数を取得したい」という考え方は間違ってます。
printなりechoなりで出力した内容が返ってきますので、PHPで変数作っても返ってくるのは展開された内容です。
なので参考された先も「JSON”文字列”」であるはずです。
JSONのほうが扱いやすいからだと思います。

投稿2021/12/12 08:36

m.ts10806

総合スコア80850

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

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

9nahito

2021/12/12 08:40

回答ありがとうございます!やってみます。
9nahito

2021/12/18 00:47 編集

ここに記入していたコードは回答として投稿させてもらいました。 ありがとうございました!
m.ts10806

2021/12/12 21:53

コメント欄では目につきにくいですしマークダウンが使えません。 自身で回答として投稿されたほうが良いと思います。
guest

0

回答ありがとうございます!
FetchAPIのPOSTでphpに送ったjavascriptの変数の値xをredis(db)に送り、phpでredisから取得したxの値をjsonに書き込みました。
最後にFetchAPIのGETでjsonからxの値をJavaScriptに取り込みました。console.log(getX)で最初にPOSTした変数の値xを取得できたことが確認できました。
下のコードはcssで描画した四角をキーの(a,d)で左右に動かせて動かした四角の座標が
console.log()で表示されるようにしました。
私はまだサーバーサイドは初心者なのでサーバーサイドがどのような仕組みかを学ぶためにこのようなことをしました。

html

1<div id="id0" style="background-color:grey;color:snow;display:inline-block;position:absolute;"> 2</div> 3<script> 4var player = document.getElementById("id0") 5var ww = window.innerWidth 6var wh = window.innerHeight 7player.style.width = ww*0.1 8player.style.height = ww*0.1 9var x = 0 10var y = 0 11var speed = 12 12var getX = 0 13var path = 'http://localhost/pfetch/test.php' 14function get(){ 15 fetch('http://localhost/pfetch/test2.json', { 16 method: "GET", 17 mode: "cors" 18 }) 19 .then(response => { 20 if (response.ok) { 21 return response.json(); 22 } 23 // 404 や 500 ステータスならここに到達する 24 throw new Error('Network response was not ok.'); 25 }) 26 .then(resJson => { 27 console.log(JSON.stringify(resJson)); 28 }) 29 .catch(error => { 30 // ネットワークエラーの場合はここに到達する 31 console.error(error); 32 }) 33} 34function update(){ 35 console.log(getX) 36 get(); 37 setTimeout(update,200); 38}update(); 39document.addEventListener("keydown",function(event){ 40 let postData = new FormData; 41 //NoSqlデータベースのredisにブラウザで入力したデータを送信する!! 42 if(event.keyCode == 68){ 43 x+=speed 44 }else if(event.keyCode == 65){ 45 x-=speed 46 } 47 player.style.left = x; 48 postData.set('num',x); 49 const data = { 50 method: 'POST', 51 body: postData 52 }; 53 fetch('http://localhost/pfetch/test.php',data) 54 //.then((res)=>res.text()) 55 //.then(console.log) 56}); 57</script>

php

1<?php 2 // エラーを出力する 3 ini_set('display_errors', "On"); 4 $data = $_POST['num']; 5 $redis = new Redis(); 6 $redis->connect("127.0.0.1",6379); 7 $redis->set('key01',$data); 8 $test = $redis->get('key01'); 9 $obj = $test; 10 $data = json_decode($obj,true); 11 $json = fopen("jsonファイルパス", 'w+b'); 12 fwrite($json, json_encode($data)); 13 fclose($json); 14?>

投稿2021/12/18 00:46

9nahito

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問