XMLHttp でサーバーデータを取得


  静的 XML 入力データ



XML をクライアントで扱うとなると、IE と Mozilla の違いを考慮する事は避けて通れません。
基本的な部分はほぼ同じですが、Microsoft の拡張機能を知る必要もあります

sjis_combo.xml
  
<?xml version="1.0" encoding="shift_jis" ?>
<combodata>
	<list>
		<![CDATA[
		<SELECT name="combo">
		<OPTION value="1">データ1</OPTION>
		<OPTION value="2">データ2</OPTION>
		<OPTION value="3">データ3</OPTION>
		</SELECT>
		]]>
	</list>
	<list>
		<![CDATA[
		<SELECT name="syozoku">
		<OPTION value="1">総務部</OPTION>
		<OPTION value="2">営業部</OPTION>
		<OPTION value="3">技術部</OPTION>
		</SELECT>
		]]>
	</list>
</combodata>
  

XML で書くと、静的データであってもキャラクタセットを指定する事ができますが、Microsoft では
responseText で取得する場合は無視するようで、日本語が化けてしまいます。

いずれにせよ、XML として処理すれば問題無いのですが、
受け取った XML データを確かめたい場合のコードを以下に示します。

  
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=shift_jis">
<SCRIPT language="javascript" type="text/javascript">

	var dom,bIE;
	var objXMLHttp;

	if ( document.all ) {
		bIE = true;
		dom = new ActiveXObject("Msxml2.DOMDocument.3.0");
		objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
	}
	else {
		bIE = false;
		dom = document.implementation.createDocument("", "", null);
		objXMLHttp = new XMLHttpRequest();
	}


function GetServerData( ) {

	var result,xml;

	// 最後のパラメータの false は、同期実行を意味します
	objXMLHttp.open(
		"GET",
		"sjis_combo.xml"
		, false );
	objXMLHttp.send( "" );

	if ( document.all ) {
		xml = objXMLHttp.responseXML;
		alert( xml.xml );
	}
	else {
		result = objXMLHttp.responseText;
		alert( result );
	}

}

</SCRIPT>
</HEAD>
<BODY>

<INPUT type=button name="send" value="送信" onClick='GetServerData( )'>

</BODY>
</HTML>
  

以下は、データのルートがどうなっているかを示すものです

  
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=shift_jis">
<SCRIPT language="javascript" type="text/javascript">

	var dom,bIE;
	var objXMLHttp;

	if ( document.all ) {
		bIE = true;
		dom = new ActiveXObject("Msxml2.DOMDocument.3.0");
		objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
	}
	else {
		bIE = false;
		dom = document.implementation.createDocument("", "", null);
		objXMLHttp = new XMLHttpRequest();
	}


function GetServerData( ) {

	var result,xml;

	// 最後のパラメータの false は、同期実行を意味します
	objXMLHttp.open(
		"GET",
		"sjis_combo.xml"
		, false );
	objXMLHttp.send( "" );
	xml = objXMLHttp.responseXML;
	result = "";

	result += xml.nodeName + "<br>";
	result += xml.childNodes.item(0).nodeName + "<br>";
	result += xml.childNodes.item(1).nodeName + "<br>";

	document.getElementById("data").innerHTML = result;

}

</SCRIPT>
</HEAD>
<BODY>

<INPUT type=button name="send" value="送信" onClick='GetServerData( )'>
<DIV id="data"></DIV>

</BODY>
</HTML>
  

IE での結果
#document
xml
combodata
※ xml は、XML宣言のノードです

Netscape での結果
#document
#text
combodata
※ #text は、空ノードです。










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ