XMLHttpRequest 覚書

Javascript から CGIを呼び出すのに便利な XMLHttpRequest 覚書

XMLHttpRequestは、Javascript から サーバー上のCGIを呼び出す時に便利なコマンドだ。

XMLHttpRequestをざっくり書いておく。

CGIへコマンドを送る

(JavaScript)
function SendCommand(cmd,val)
{
	var url;
	var xhr = new XMLHttpRequest();
	
	url = 'http://~/~.php';
 	
	xhr.open('POST', url);		// 第3引数を true にすることで、リクエストを非同期に処理することを指定出来る。デフォで同期
	xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
	xhr.send( 'cmd='+cmd+'&text='+val );	// xhr.send("foo=bar&lorem=ipsum");
	if(xhr.readyState === 4 && xhr.status === 200) {
        return( xhr.responseText );
    }
}

コマンドの受け取り側 CGI

(php)
	$text = $_POST['text'];
	$fld  = decode_text($text);
	foreach($fld as $key => $val){
		echo $key.'='.$val.'<br />';
	}
//==============================================================================
function decode_text($text)
//==============================================================================
{
	$fld = array();
	$stk = explode('<>',$text);
	foreach($stk as $line){
		$p = strpos($line,"=");
		if($p!==false){
			$key = substr($line,0,$p);
			$val = substr($line,$p+1);
			$fld[$key] = $val;
		}
	}
	return($fld);
}

XMLHttpRequest の戻りステータス readyState

0 UNSENT クライアントは作成済み。open() はまだ呼ばれていない。
1 OPENED open() が呼び出し済み。
2 HEADERS_RECEIVED send() が呼び出し済みで、ヘッダーとステータスが利用可能。
3 LOADING ダウンロード中。responseText には部分データが入っている。
4 DONE 操作が完了した。
よくあるのが readyState = 1 の場合。
これは、CGI側でトラブルがあって呼び出したけど応答がないぜと考えるのが吉。
大抵はCGI側で文法エラーを起こしている。


スポンサーリンク