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

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

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

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

PHP

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

JavaScript

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

Ajax

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

解決済

AJAXでjavascriptからphpにjsonデータを送りたい。

sumou_man
sumou_man

総合スコア10

JSON

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

PHP

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

JavaScript

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

Ajax

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

2回答

0評価

0クリップ

614閲覧

投稿2022/03/03 09:45

編集2022/03/03 20:39

javascriptファイルからphpファイルへjsonデータを送信したいがnullとなってしまう。

前提・実現したいこと

・javascriptにてjsonデータをPHPファイルに送信。
・phpファイルで受け取ったjsonデータを加工。

発生している問題

phpファイルでjsonデータを受け取れず、nullが返ってくる。

該当のソースコード

javascript

!function(){ let btn = document.querySelector('#get'); btn.addEventListener('click', function(){ //テストJSONデータ var json_data = JSON.stringify({ "Language": "en" }); //送信先PHP var url = "handler"; //ajax処理開始 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState === 4 && xhr.status === 200){ document.getElementById('out').innerHTML = this.responseText; } }; xhr.open('POST', url, true); xhr.setRequestHeader("content-type", "application/json;charset=UTF-8"); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(json_data); }); }();

PHP

if ($_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') { die(json_encode(array('stat' => "参照不成功:不正な呼び出し"))); } // ファイル受け取り $json = file_get_contents('php://input'); // jsonデコード $data = json_decode($json, true); var_dump($data);

対応内容

・送信データのリクエストヘッダーはjson形式に修正。
・ajax送信時のセキュリティ対策として'X-Requested-With'を追加。
(上記の記述を消しても問題は解消しませんでした。)
・ajaxのレスポンスは問題なく、phpファイルに作成したコードの出力は問題なし。

使用ツール

・xampp

追記

PHP Version 8.1.2
確認ブラウザ googleChrome microsoft Edge

※回答者様のローカル環境では問題なく動作確認済み。

お手数かけますがよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/03/03 09:52

Fiddler などのキャプチャツールを使って調べてみましたか?
sumou_man

2022/03/03 11:27 編集

ありがとうございます。当方、勉強不足でキャプチャツールを使ったことがないです。調べてみます! (※追記) FIddler導入してレスポンスコードを確認したところ301のリダイレクト状態になっており、問題解決につながりました!ありがとうございました。
PlugOut777

2022/03/03 10:31 編集

掲示されたソースコードを元に、ローカルで再現させてみようと思ったのですが 該当の症状は発生しませんでした。 (正常にarray(1) { ["Language"]=> string(2) "en" }がHTML内に表示されたという意味です) そのため、掲示された情報以外の部分に問題が潜んでいる可能性が高いと思います。 (ちなみに再現について、XAMPPは利用していません) また、何かのバージョン依存の可能性もありますので ブラウザやPHPのバージョン等を記載しておくと、誰かから何かヒントをもらえるかもしれません。
sumou_man

2022/03/03 10:50

ありがとうございます!正常に表示されてましたか。。。。 仮想環境が原因かもしれないですね。とても助かります。 ブラウザやバージョンについても追記させていただきました。
PlugOut777

2022/03/03 11:22 編集

php8.1.2で試しましたが、やはり再現しませんでした。 ところで一つ気になったのですが > var url = "handler"; こちら、実際には別のURLに置換されるものかと勝手に思い込んでいたのですが もしかしてapache側でルーティングの設定を弄っていますか?
sumou_man

2022/03/03 11:25

ありがとうございます。ちょうど今解決しまして、すみません。おっしゃるとおりルーティングでリダイレクトの状態になっておりそれが原因でした。ベストアンサーにしたいのですが回答にコメントいただけませんか?
PlugOut777

2022/03/03 11:34

いえいえ、解決されたのであれば何よりです。 ベストアンサーにこだわりはありませんので、自己解決にして解決内容を書いていただければと思います。
sumou_man

2022/03/03 11:35

とても助かりました。ありがとうございました。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JSON

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

PHP

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

JavaScript

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

Ajax

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