/** * H_HttpReqObj.js - HTTPリクエストオブジェクト生成用モジュール * @version see mMyVersion * @author H-Hash (studyinghttp.net) */ /** * コンストラクタ * @param handler リクエスト受信時のイベントハンドラ(モジュール利用側で実装すること) * @return HTTPリクエストオブジェクト */ function H_HttpReqObj (handler) { /* global variable */ /** Ver. number of this module */ var mMyVersion = "0.2"; /** instance */ var mObj = new Object(); /* XMLHttpRequest_Object */ var mObjHttp = new XMLHttpRequest(); /* Hash of Request Headers */ var mHashReqHeaders = new Array(); /* my Properties */ { /* event handler */ mObjHttp.onreadystatechange = handler; /* public member */ { /* HTTP通信状態 */ /** 未送信 */ mObj.UNSENT = 0; /** リクエスト発動 */ mObj.OPENED = 1; /** レスポンスヘッダ受信完了 */ mObj.HEADERS_RECEIVED = 2; /** レスポンスボディ受信中 */ mObj.LOADING = 3; /** HTTP通信完了 */ mObj.DONE = 4; } /* public method */ { /* リクエストに関するメソッド */ /** * リクエストヘッダを設定する * @param header リクエストヘッダ名 * @param value ヘッダフィールド内の値 */ mObj.setRequestHeader = _setReqHeader; /** * GETリクエストを実行する * @param url リクエストURL */ mObj.doGet = _doOpenSendGet; /** * HEADリクエストを実行する * @param url リクエストURL */ mObj.doHead = _doOpenSendHead; /** * POSTリクエストを実行する * @param url リクエストURL * @param msg リクエストメッセージ */ mObj.doPost = _doOpenSendPost; /* レスポンスに関するメソッド */ /** * ステータスコードを返す * @return ステータスコード */ mObj.getStatusCode = _getStatusCode; /** * 説明句を返す * @return 説明句 */ mObj.getReasonPhrase = _getReasonPhrase; /** * 指定されたレスポンスヘッダを返す * @param header レスポンスヘッダ名 * @return レスポンスヘッダ */ mObj.getResponseHeader = _getRespHeader; /** * 全てのレスポンスヘッダを返す * @return 全てのレスポンスヘッダ */ mObj.getAllResponseHeaders = _getAllRespHeaders; /** * レスポンスボディをテキストで返す * @return レスポンスボディ(テキスト形式) */ mObj.getResponseText = _getRespText; /** * レスポンスボディをXMLで返す * @return レスポンスボディ(XML形式) */ mObj.getResponseXml = _getRespXml; /** * リクエストが完了しているか? * @return リクエストが完了していればtrue */ mObj.isReqDone = _isReqDone; /** * リクエストに成功しているか?(2xxレスポンスが得られたか?) * @return リクエストに成功していればtrue */ mObj.isReqSuccess = _isReqSuccess; /* その他 */ /** * モジュールのバージョンを返す * @return モジュールのバージョン番号 */ mObj.getMyVersion = _getMyVer; } return mObj; } /* private_method */ // リクエストが完了しているか? function _isReqDone() { // 現在のリクエストの進行状況 var myState = mObjHttp.readyState; if (myState == mObj.DONE) { return true; } else { return false; } } // リクエストに成功しているか?(2xxレスポンスが得られたか?) function _isReqSuccess() { // 現在のステータスコード var myStatus = mObj.getStatusCode(); if (200 <= myStatus && myStatus <= 299) { return true; } else { return false; } } /* * リクエストを実行する * @param method リクエストメソッド * @param url リクエストURL * @param msg リクエストメッセージ */ function _doOpenSend(method, url, msg) { mObjHttp.open(method, url, true); // openしてからリクエストヘッダをセット for (var key in mHashReqHeaders) { mObjHttp.setRequestHeader(key, mHashReqHeaders[key]); } // 最後にsend mObjHttp.send(msg); } /* GETリクエストを実行 */ function _doOpenSendGet(url) { _doOpenSend('GET', url, null); } /* HEADリクエストを実行 */ function _doOpenSendHead(url) { _doOpenSend('HEAD', url, null); } /* POSTリクエストを実行 */ function _doOpenSendPost(url, msg) { /* Content-Typeヘッダを設定 */ _setReqHeader('Content-Type', 'application/x-www-form-urlencoded'); _doOpenSend('POST', url, msg); } /* リクエストヘッダを設定 */ function _setReqHeader(header, value) { // ハッシュに入れておくだけ // 実際の設定はopen()後に行う mHashReqHeaders[header] = value; } // レスポンスボディをテキストで返す function _getRespText() { return mObjHttp.responseText; } // レスポンスボディをXMLで返す function _getRespXml() { return mObjHttp.responseXML; } // 指定されたレスポンスヘッダを返す function _getRespHeader(header) { return mObjHttp.getResponseHeader(header); } // 全てのレスポンスヘッダを返す function _getAllRespHeaders() { return mObjHttp.getAllResponseHeaders(); } // ステータスコードを返す function _getStatusCode() { return mObjHttp.status; } // 説明句を返す function _getReasonPhrase() { return mObjHttp.statusText; } // モジュールのバージョンを返す function _getMyVer() { return mMyVersion; } }