buttonとsubmitは異なるタイプであることを知らなかったことを反省するメモ
Ajaxを試すために以下のようなコードを動かしてみた。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Learning Ajax</title> </head> <body> <form> <label for="name">Name : </label> <input id="name" type="text" name="name" size=15 value="john doe"/> <input id="btn" type="submit" name="submit" value="send" /> </form> <div id="result"></div> <script src="hello_ajax_get.js" ></script> </body> </html>
このHTMLから以下のようなページが表示される。
JavaScriptは以下の通り。
PHPのページからの応答結果をid="result"に流し込むことを意図している。
hello_ajax_get.js
document.addEventListener('DOMContentLoaded',function(){ document.getElementById('btn').addEventListener('click',function(){ var result = document.getElementById('result'); var xhr = new XMLHttpRequest(); xhr.addEventListener('loadstart',function(){ result.textContent='Now Communicating ...'; },false); xhr.addEventListener('load',function(){ result.textContent=xhr.responseText; },false); xhr.addEventListener('error',function(){ result.textContent='server error'; },false); xhr.open('GET','hello_ajax_get.php?name=' + encodeURIComponent(document.getElementById('name').value),true); xhr.send(null); },false); },false);
PHPのページは入力されたnameに'Hello ! Good luck'を付加して返すだけだが、何かを実行している感じを出すためにsleepを入れている。
hello_ajax_get.php
<?php header('Access-Control-Allow-Origin:*'); sleep(3); print('Hello '.$_REQUEST['name'].'! Good luck !');
これらのコードではうまく動作しなかったが、なかなか原因がわからなかった。
javascriptに原因があると勝手に思い込み、泥沼に陥ってしまったが、結局、inputのtypeをsubmitからbuttonにすると意図したとおりに動作してくれた。
submitとbuttonの違いを意識したことがなかったが、submitは押された瞬間に送信するがbuttonは押されたときの処理を自分で記述しなければならないとのこと。今回のような場合は自分で処理を記述したいので、submitは不可となるのだろう。
なぜ、「どうせ同じようなものだろう!」と思い込んでしまったのか?分からない。
了