【JavaScript】Ajaxでサーバへデータを送信してみる
こんにちは、しきゆらです
CGIの記事からすでに2か月ほどたっていますが、クライアントからサーバへデータを送信する方法を見て行こうと思います
なお、この記事ではjQueryなどのライブラリを用いず、素のJavaScriptで書いていきます
Ajaxとは何でしょう?
IT用語辞典によると、
Ajaxとは、Webブラウザに実装されているJavaScriptのHTTP通信機能を使って、Webページのリロードを伴わずにサーバとXML形式のデータのやり取りを行って処理を進めていく対話型Webアプリケーションの実装形態
とのこと
「XML形式で」と書かれていますが、別にこれに限った話ではないようです
前回のCGIとAjaxを使うことで、ページ遷移せずにWebページ内の情報を書き換えることができるようになります
その他、この辺も参考になるかと思います
実際に触ってみる
まずは、サーバへリクエストを送信するものを作成する部分を見てみます
function createHttpRequest(){ var request = false; if(window.XMLHttpRequest){ request = new XMLHttpRequest(); } return request; }
サーバとのやりとりを行うためには、データの送受信を行うXMLHttpRequestオブジェクトを作成します
(上記コードの4行目部分)
なんでこんな面倒な書き方してるの?
古いブラウザ(IE6とか)だとXMLHttpRequestではなく、ActiveXObjectというものを使うようです
古いブラウザにも対応しなければならないような場合、上記にelseでActiveXObjectオブジェクトを作成しなければならない場合もあるので、こんな感じに書いています
最近のブラウザでは、XMLHttpRequestだけで十分なので、古いブラウザに対応しなくてもいい場合は1行だけで十分です
次に、送信処理部分を見てみます
function send_request(){ var request = createHttpRequest(); if(request){ request.open("GET", URL, true); request.onreadystatechange = function(){ if(request.readyState == 4){ confirm(request.responseText); } } request.send(null); } }
この関数は、自分で作ったものなので関数名とかは適宜変えても大丈夫
テンプレート的な部分は3~10行目あたり
まずは
request.open("GET", URL, true);
では、どこにどういう通信を行うかを設定しています
openの引数は
- HTTPメソッドを設定する
- アクセス先のURL
- 非同期通信を行うかどうか(true:非同期、false:同期通信)
となっています
以下の部分では、通信して結果が帰ってきたときの処理を記述しています
request.onreadystatechange = function(){ if(request.readyState == 4){ confirm(request.responseText); } }
onreadystatechangeは、readyStateが変化するたびに呼ばれます
readyStateとは、通信の状態が切り替わる時に変化します
どういう状態があるかというのは、こちらのサイトにまとめられています
readyStateが「4」のときとは、サーバへのリクエストが完了した状態に当たります
responseTextには、サーバへのリクエストを送り、その結果が入っています
それをconfirmで表示しています
以下で、作成したリクエストを送信しています
request.send(null);
sendをしないとサーバへの送信を行えません
なお、引数をnullにしているのは、GETメソッドでは必要が無いのでnullにしています
POSTメソッドで通信を行う場合は、ここに渡すようです
あとは適当なHTMLにinputタグでクリック時にsend_request()を呼び出せば試すことができます
もし、上手くいかない場合はファイルのパーミッションを確認したり、URLを見直してみるといいかも
それでもわからない場合は、サーバ側のログファイルあたりを見てみるといいと思います
今回は、簡単ですがクライアントからサーバへリクエスト送信部分を見てみました
おわり