PublicDomainPicturesによるPixabayからの画像
Ajaxの基礎を調べて、いつでも使えるようにここに基礎をまとめます。
jQueryを使わず素のJavaScriptを使用し、htmlファイル1つとphpファイル1つでajaxを使ってみます。
初めてAjaxを触る方、とにかくシンプルにAjaxを試してみたい方におすすめの記事です。
OS:Windows11 / WSL(Ubuntu20.04)
php:v7.4.33
この記事はPHPを動作させる環境が整っている方に向けて書いています。
もし、Apache等のWebサーバーソフトをインストールしていない場合は、以下の記事を参考にビルトインサーバーを使ってPHPを動かしてみてください。
https://tekutekku.com/php_use_easytostart_webserver/
Ajaxを使ってGetリクエストをを試してみます。
適当な場所にフォルダを作成し、その中に以下のようにファイルを2つ作成してください。
■1ファイル目:フロント側のコード
ファイル名:ajax_get_client.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="ajaxGetSend()">Ajax_GET通信開始!</button>
<script>
function ajaxGetSend(){
let xhr = new XMLHttpRequest();
//↓通信先のURL GETではここでサーバーに値を渡す
xhr.open('GET', "./ajax_get_server.php?word1=Hello&word2=Ajax");
xhr.send(); //←通信開始
//↓後程解説します↓
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
console.log(xhr.responseText);
}
}
}
</script>
</body>
</html>
■2ファイル目:バックエンド側のコード
ファイル名:ajax_get_server.php
<?php
echo 'Ajax Success!!'; //フロントに値を渡すにはechoを使う
echo $_GET['word1']; //$_GETでパラメータを受け取る
echo $_GET['word2'];
上記2ファイルを作成したらさっそく動作確認です。
ブラウザでajax_get_client.htmlにアクセスすると以下のように表示されるはずです。
この画面が表示されていればOKです!
F12を押してディベロッパーツールを開いてください。
ディベロッパーツールを開いたら、ブラウザに表示された「Ajax_GET通信開始!」ボタンを押してください。
ディベロッパーツールでこの画像↓のように「Ajax Success!!HelloAjax」と表示されていることが確認できればAjaxでの通信成功です!
次にAjaxでのPostリクエストのやり方です。
先ほどと同じように任意の場所にフォルダを作成し、そのフォルダ内に以下の2ファイルを作成してください。
■1ファイル目:フロント側のコード
ファイル名:ajax_post_client.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="ajaxPostSend()">Ajax_POST通信開始</button>
<script>
function ajaxPostSend(){
let xhr = new XMLHttpRequest();
xhr.open('POST', './ajax_post_server.php'); //←通信先のURL
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTL-8');
//↓通信開始 POSTではここでサーバーに値を渡す
xhr.send('word1=Hello&word2=Ajax');
//↓後程解説します↓
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
console.log(xhr.responseText);
} //↑xhr.responseTextにサーバーからの値が入る!
}
}
</script>
</body>
</html>
■2ファイル目:バックエンド側のコード
ファイル名:ajax_post_server.php
<?php
echo 'Ajax Success!!'; //フロントに値を渡すにはechoを使う
echo $_POST['word1']; //$_POSTでフロントから渡される値を受け取る
echo $_POST['word2'];
これで準備ができたので動かしてみてください。
ブラウザでajax_post_client.htmlにアクセスすると以下のように表示されるはずです。
そして、「Ajax_POST通信開始」ボタンを押すとディベロッパーツールに以下のように出力されているはずです。
readyState、statusはAjaxの通信状態を教えてくれる変数です。
具体的には以下のようになっています。
■readyStateの値
値 | 状態 | 内容 |
0 | 準備段階 | まだ通信は行われていない状態 |
1 | 準備完了 | 通信をする準備が整った状態 |
2 | 通信開始 | サーバーと通信が開始した状態 |
3 | 受信中 | サーバーからデータ取得中の状態 |
4 | 受信完了 | データ取得が完了し通信終了した状態 |
■statusの主な値
値 | 状態 | 内容 |
200 | 成功 | 問題無く通信成功 |
401 | エラー | 認証が必要で通信できない状態 |
403 | エラー | アクセス禁止されていて通信不可 |
404 | エラー | 情報が存在せず通信不可 |
500 | エラー | サーバー側の不具合で通信不可 |
503 | エラー | サーバーに負荷がかかっていて通信不可 |
サーバーからJSONデータを受け取ることは多いと思うので、JSONデータの受け取り方についても載せておきます。
任意の場所にフォルダを作成し、以下2ファイルを作成してください。
■1ファイル目:フロント側のコード
ファイル名:ajax_get2_client.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="ajaxGetSend()">Ajax_GET通信開始!</button>
<script>
function ajaxGetSend(){
let xhr = new XMLHttpRequest();
xhr.open('GET', './ajax_get2_server.php');
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
console.log(JSON.parse(xhr.responseText));
} ↑JSONに戻す
}
}
</script>
</body>
</html>
■2ファイル目:バックエンド側のコード
ファイル名:ajax_get2_server.php
<?php
echo json_encode($json);
↑JSONを文字列に変換してフロントに渡す