【JavaScript】XMLHttpRequestを複数作る時のメモ
こんにちは、しきゆらです
今回は、タイトル通りXMLHttpRequestオブジェクトを複数作る場合のメモです
XMLHttpRequestオブジェクトをたくさん作る時、似たような記述が多くなってしまい
コードが読みにくい!
これを解決するために、考えついたのが
「XMLHttpRequestオブジェクトを作って返す関数を作ればいいのでは?」
ということ
今回は、これについて書いていきます
最近の個人的コード事情
最近はJavaScriptを書く機会が多くなっています
これまでは、サーバとやり取りをしてデータを送ったり取得する時に
その都度XMLHttpRequestオブジェクトを作成してました
function hoge(){ var hoge_xhr = new XMLHttpRequest(); // hoge_xhrに対して色々設定 hoge_xhr.open("GET", "./hoge.rb", true); hoge_xhr.onreadystatechange = function(){ // サーバからの応答があったら何らかの処理をする } hoge_xhr.send(null); } function fuga(){ var fuga_xht = new XMLHttpRequest(); var data = {"サーバへ送るための": "データ"}; // fuga_xhrに対して色々設定 fuga_xhr.open("POST", "./fuga.rb", false); fuga_xhr.onreadystatechange = function(){ // サーバにデータを送り、帰ってきたものに対して何らかの処理をする } fuga_xhr.send("data=" + JSON.stringify(data)); }
onreadystatechangeの部分には、実際には処理する内容を記述するのでこれよりさらに長くなっていまいます
しかも、コード内に似たような記述がたくさんあり
どこで、何をやっているのかが分かりにくくなってしまいました
これを解決するために、
「XMLHttpRequestオブジェクトを作って返す関数を作ればいいのでは?」
という発想に至りました
(そもそも、複数XMLHttpRequestオブジェクトを作るのは作法的に良くない!とかあるのかな・・・?)
- URLの指定
- HTTPメソッドの指定
- サーバからのレスポンスに対する処理
という部分は共通しています
function create_request(method, url, synchro, callback_function){ var request = new XMLHttpRequest(); request.open(method, url, synchro); request.onreadystatechange = callback_function; return request; }
もし、古いブラウザにも対応する場合は
2行目あたりで分岐させればいいと思います
コールバック関数をXMLHttpRequestオブジェクトの定義外で書くことになるので
飛び飛びになってしまいますが
個人的にはとてもコードがすっきりしていい感じです
さらに
- コールバック関数を一箇所にまとめる
- コールバック関数の命名規則を統一する
- 例:callback_呼び出し元関数名
のようなルールを自分で作れば問題ないような気がします
なお、コールバック関数ないで「responseText」等を使う場合は
this.responseText
とすると利用できます
お作法的にお行儀がいいのかどうかはわかりませんが
こう書いてみるのはどうでしょうか?というメモでした
「こう書くのは〇〇の時に危ないよ!」等、何かアドバイスがあればコメントを宜しくお願いします
おわり