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

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

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

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

JavaScript

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

jQuery

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

Ajax

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

Q&A

解決済

2回答

227閲覧

Ajaxの仕組みについて

toll_tree

総合スコア199

PHP

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

JavaScript

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

jQuery

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

Ajax

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

0グッド

1クリップ

投稿2019/05/09 01:41

ajax通信に関して、疑問点がございます。
下記は、GETリクエストによるajax通信を実装した、jquer_practice.html、及び、greet.phpです

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>jquery_pracitce</title> 6 <style> 7 8 </style> 9</head> 10<body> 11 12 <p>jQueryの練習</p> 13 <p> 14 <input type="text" name="name" id="name"> 15 <input type="button" id="greet" value="Greet!"> 16 17 </p> 18 <div id="result"></div> 19 20<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 21<script> 22 $(function() { 23 $('#greet').click(function() { 24 $.get('greet.php', { 25 name: $('#name').val() 26 },function(data) { 27 $('#result').html(data.message + '(' + data.length + ')'); 28 29 }); 30 }); 31 }); 32</script> 33</body> 34</html>

php

1<?php 2//echo htmlspecialchars("hi!" . $_GET['name'],ENT_QUOTES,'utf-8'); 3$rs = array( 4 "message" => htmlspecialchars("hi!" . $_GET['name'],ENT_QUOTES,'utf-8'), 5 "length" => strlen($_GET['name']) 6); 7 8header('Content-Type: application/json; charset=utf-8'); 9echo json_encode($rs);

上記コードでは、入力された文字がphp側に渡され再びhtmlにて、出力されていると思うのですが、php側でhtmlファイルへ情報を送るための、urlの指定などはないですが、何故、htmlファイルへの情報が送信されるのでしょうか?
また、php側で送られてきたデータの処理が終了した後、header関数の記載があるのですが、こちらの記載がなければ、処理を行ったデータを返せないといったことはあるのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

php側でhtmlファイルへ情報を送るための、urlの指定などはないですが、何故、htmlファイルへの情報が送信されるのでしょうか?

このPHPの出力結果は、呼び出したJavaScriptに返ってくるので、JavaScriptがHTMLを操作します。HTMLをPHPが直接書き換えているわけではありません。

header関数の記載があるのですが、こちらの記載がなければ、処理を行ったデータを返せないといったことはあるのでしょうか?

はい、JSONを返す以上、Content-Type: application/jsonとして、「送信データはJSONです」ということを宣言する必要があります。そうしないと、受け取ったJavaScriptの側で形式が正しく認識できません。

投稿2019/05/09 01:45

maisumakun

総合スコア145184

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

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

toll_tree

2019/05/09 01:52

ご回答ありがとうございます。 PHPの出力結果ということは、PHP側では、GETリクエストなどで受け取ったデータの処理が終わった際は、headerで、json形式の指定を行い、必ずechoする必要があるということでしょうか?
maisumakun

2019/05/09 01:55

> headerで、json形式の指定を行い、必ずechoする必要があるということでしょうか? それは、JavaScriptの側に「JSON形式で結果を返したい」から行っていることです。成功/失敗だけ伝えたいなら、結果を「204 No Content/403 Forbidden」といったHTTPステータスで返すことで、echoは何もしない、という選択肢もありえます。
toll_tree

2019/05/09 01:58

ご返信ありがとうございます。 >結果を「204 No Content/403 Forbidden」といったHTTPステータスで返す こちらなのですが、例えばPHP側の処理で、どのようにすれば返すことができるのでしょうか?
toll_tree

2019/05/09 02:09

ありがとうございます。 仮になのですが、http_response_code()としまして、レスポンスを取得した場合でも、こちらの結果をechoしなければならない、ということはないのでしょうか? そのまま、「http_response_code()」と記述するだけで、html側へはステータスを返すことができるのでしょうか?
maisumakun

2019/05/09 02:14

> http_response_code()としまして、レスポンスを取得した場合でも http_response_code()ではなく、http_response_code(204)のようにすれば設定が可能です。
toll_tree

2019/05/09 02:17

どうもです。理解できました。
guest

0

大前提として、PHPはどこからリクエストが来て返すレスポンスがどう使われるか知りません。
リクエストが送られてきたら極めて機械的に処理を行い、リクエストを送ってきた先に返しているだけのことです。

「API」という言葉をご存知でしょうか。
よく使われている中に「郵便番号API」というのがあります。
郵便番号APIも郵便番号が送られてきたらその内容で検索を行い、結果を返しているだけ。
AjaxはまさにそのAPIと同じです。

結果がどう使われるかAPI側は知らないし、指定することはできません。
単にリクエストが送られてきた先に返しているだけです。なので、API側から情報を返す先を指定することはありません。(API側で別APIを呼び出していたとしてもあくまでその結果が返るのは呼び出しもと)

もちろん既に回答があるように
API側は「どのような形式で返すか」を決める必要があり、
呼び出す側は「どのようなINPUTを送るとどのようなOUTPUTが返ってくるか」とAPIの仕様を把握したうえで使う必要があります。

つまり、Ajaxで呼び出されるプログラムはあくまで独立した1つのアプリケーションであるということを認識する必要があります。

そのあたりは「Ajaxとはそもそも何か」仕組みを調べたほうが良いです。
たまに呼び出したPHPでそのままhtmlを全部書いて「bodyの中のメッセージだけだけ返したいのにhtml全部返ってきてしまう」と質問にあげる人がいます。

投稿2019/05/09 01:57

m.ts10806

総合スコア80850

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

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

toll_tree

2019/05/09 02:12

ご回答ありがとうございます。 となりますと、ajax通信をするために、呼び出したphpファイルなどは、ajax通信専用のファイルで、送った値などを処理するコードを書いた方が良いのでしょうか?
m.ts10806

2019/05/09 02:15

回答に書いた下記です。 >Ajaxで呼び出されるプログラムはあくまで独立した1つのアプリケーションである 別にビューと同じファイルに書けないことはないですが、出力を全て呼び出しもとに返す特性から分岐が増えてコードが煩雑化するのと、役割分担の観点から、単体のみで実行できるようにすべきです(GETかPOSTかは仕様なので決めてください)
toll_tree

2019/05/09 02:18

やはり、ファイルは分けた方がよさそうですね。 勉強になりました。
m.ts10806

2019/05/09 02:25

大事なのはファイルを分割することではなく「あくまで独立した1つのアプリケーション」という部分で、「どこからどう呼び出されるか知らずに、単に受け取ったリクエストを処理してリクエストを送ってきた先に返しているだけ」ということです。 「必ずここからこういう情報が送られてくる」という前提で作ると必ずこけます。それはphpで関数なりクラスなり作るときも同じですね。どこからどう使われるという前提などないです。あくまで道具の1つ。
toll_tree

2019/05/09 02:35

APIに関しては、まだ勉強不足な為、理解しきれない部分もあったのですが、「一つの独立したアプリーケション」でピンときました。 実は、貼って貰った記事の一つもそうですが、ajaxに関する学習をしていて、少し気になる点があったのですが、ajaxを行う際は、javascriptで処理が書かれているのではなく、jqueryで実装されている記事を多く目にしたのですが、この理由は、単純にjqueryの方が簡単に書けるから、という理由もあるのでしょうか?
m.ts10806

2019/05/09 02:45 編集

別回答にて解決後に追加質問っぽくてちょっと返答をためらわれるのですが、 個人的には「どちらでもいい」です。 jQueryもJavaScriptのライブラリなので裏ではガンガンPureJavaScriptが動いているというのはご存知と思います。 つまり、そこだけ切り取るとPureJavaScriptだけで書いたほうが本来必要な記述だけで組むことができるので速度的には速くなります。「jQuery不要論」もあるくらいなので。 https://github.com/nefe/You-Dont-Need-jQuery (Qiitaでも多く紹介されている有名な記事です) 日本語訳で最も有名な記事:https://qiita.com/tatesuke/items/b9548dd484b01b139b74 ただ、jQueryのほうが「簡潔に書ける(ここを”簡単”と表現してしまうと正しくありません)」という点で紹介記事にて採用される率が高いというところが実際のところです。 いずれにしても記事を読んで論じるだけでなく、実際に自分で簡単なコードを作って動かして失敗して、を繰り返したほうが身につくのは当然のことと思います。 スポーツと同じと思っています。野球の教本を幾ら読んでもヒットを打てるようにはなりません。熟練者(回答者)の説明を幾ら聞いてもコードを書けるようにはなりません。失敗を知らないと成功に辿り着くことはできません。私も今もずっと trial & errorの日々です。
toll_tree

2019/05/09 03:09 編集

ご返信ありがとうございます。 >ただ、jQueryのほうが「簡潔に書ける となりますと、実際、開発をする際は、javascriptにてajax処理を実装するケースも多いということでしょうか? 記事では、簡単にかけて説明が安易であるから、jqueryが使われているということなのでしょうか?
m.ts10806

2019/05/09 03:17

これも別回答にて解決後に追加質問で本件とは離れていくため返答をためらわれるのですが(2回目) 「プロジェクトによる」です。書き方は1システム内で統一すべきではありますがそれも「プロジェクトによる」です。
toll_tree

2019/05/09 03:44

まぁそういってしまえばそうですね
m.ts10806

2019/05/09 03:56

別回答にて解決後に追加質問で本件とは離れていく内容なのに、理解度合いと何に対するなんの返答なのか不明瞭なコメントは失礼にあたると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問