XMLHttpRequest 動作例(POSTまたはGET)について

javascript

XMLHttpRequest 動作例(POST)について

XMLHttpRequestについて、実際に動作サンプルを試してみます。
画面上のボタンを押したら、クライアント側からサーバ側へ文字列を送信してみます。

単純な文字列を、POST形式で送信するサンプルを、以下のHTMLを用意してみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>
 
<input type="button" id="sampleXMLHttpRequest" value="XMLHttpRequest送信テスト(POST)">
 
<script type="text/javascript">
 
// ボタン要素のDOMを取得
let element_sampleXMLHttpRequest = document.getElementById('sampleXMLHttpRequest');
 
// イベントを付与
element_sampleXMLHttpRequest.addEventListener('click',  SendXMLHttpRequest, false);
 
// ボタン押下時の処理
function SendXMLHttpRequest()
{
    let req = new XMLHttpRequest();
 
    // 送信する文字列は「キー=値」の形にする
    let send_string = "test_post_value=123";
 
    req.open("POST", "./receive.php");
 
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 
    req.send(send_string);
}
 
</script>
 
</body>
</html>

また、受取り側のreceive.phpでは、受取った値を$_REQUESTで参照し、ログファイルに出力して値を確認しています。
ログ出力の内容は常に通信1回につき、1回の受信のみ出力しています(蓄積はしていません)

1
2
3
4
5
<?php
 
file_put_contents('./receive.log', print_r($_REQUEST, true));
 
?>

サーバ上のHTMLはこちら(test1.html)

実際に画面上のボタンを押下してボタンを押すと、見た目の変化はありません。
開発者ツールのネットワークで、サーバ側への通信が行われていることが確認できます。

POST形式でサーバ側へ通信する場合は
「キー=値」の形式にしないと正しくサーバ側(この例ではphp側)で値を受信できません。

また、setRequestHeaderの値も、第一引数に「Content-Type」
第二引数に「application/x-www-form-urlencoded」を指定するとXMLHttpRequestを使わない場合の
通常の画面サブミットを同じ形式でサーバ側に値を送ることができます。

サーバ側の受信ログの内容をみてみると、以下のようになります。

1
2
3
4
Array
(
    [test_post_value] => 123
)

XMLHttpRequest 動作例(GET)について

では次に、GET方式でサーバ側に文字列を送信してみます。

受信側のphpはPOSTの場合と同じです。

HTMLは以下のように書いています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>
 
<input type="button" id="sampleXMLHttpRequest" value="XMLHttpRequest送信テスト(GET)">
 
<script type="text/javascript">
 
// ボタン要素のDOMを取得
let element_sampleXMLHttpRequest = document.getElementById('sampleXMLHttpRequest');
 
// イベントを付与
element_sampleXMLHttpRequest.addEventListener('click',  SendXMLHttpRequest, false);
 
// ボタン押下時の処理
function SendXMLHttpRequest()
{
    let req = new XMLHttpRequest();
     
    req.open("GET", "./receive.php?test_get_value=123");
 
    req.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
     
    req.send();
}
 
</script>
 
</body>
</html>

サーバ上のHTMLはこちら(test2.html)

GET形式でサーバ側へ通信する場合は、URLの後に「キー=値」の文字列を追加してサーバ側に送信しています。

画面上のボタンを押下すると、開発者ツールのネットワークは以下のように通信が行われていることがわかります。

また、setRequestHeaderの値も、第一引数に「Content-Type」、第二引数に「text/plain;charset=UTF-8」を
指定しています。

サーバ側の受信ログの内容をみてみると、以下のようになります。

1
2
3
4
Array
(
    [test_get_value] => 123
)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です