AJAX - サーバー応答
サーバーから応答を取得するには、XMLHttpRequest オブジェクトの responseText プロパティまたは responseXML プロパティを使用します。
ResponseText と ResponseXML
応答メッセージの内容は、XML、プレーン テキスト、(X)HTML、JavaScript Object Notation (JSON) など、さまざまな形式で提供される場合があります。受信したデータの形式に応じて、responseText または responseXML を使用する 2 つの異なる方法で処理できます。
responseText メソッドは、XML ベースではない形式に使用されます。応答情報を文字列として受け取り、正確な内容を返します。プレーン テキスト、(X)HTML、および JSON はすべて、responseText を使用します。 responseText はページにコンテンツを追加できるだけでなく、AJAX リクエストをデバッグするときにも役立ちます。たとえば、すべてのタグがどのようなものであるか、タグが XML 形式であるか JSON ファイルであるかがまだわからないため、データを分析する準備ができていない場合があります。これには、分析中のデータを検出する方法が必要です。すべてのタグ名がわかったら、あとはコードを記述するだけです。
responseXML の使用も非常に簡単です。ただし、JSON 形式と同様に、XML にはデータ分析が必要です。最初に行う必要があるのは、XML 応答内のルート ノードを特定することです。
var response = ajax.request.responseXML.documentElement;
次に、すべての要素を名前で取得し、その値を取得します:
var header = response.getElementsByTagName('header')[0] .firstChild .data;
var description =response.getElementsByTagName('description')[0].firstChild.data;
varsourceUrl =response.getElementsByTagName('sourceUrl')[0]。 data;
最後に、対応する div タグに応答情報を表示します:$("body").html("<b>" + header + "</b>< br/> ;" ;
<!DOCTYPE html> <html> <head> <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","ajax_info.txt",true); xmlhttp.send(); } </script> </head> <body> <div id="myDiv"><h2>使用 AJAX 修改该文本内容</h2></div> <button type="button" onclick="loadXMLDoc()">修改内容</button> </body> </html>
サーバーからの応答が XML であり、XML オブジェクトとして解析する必要がある場合は、responseXML プロパティ
を使用してcd_catalog.xml ファイルを解析し、応答を解析します:
<!DOCTYPE html> <html> <head> <script> function loadXMLDoc() { var xmlhttp; var txt,x,i; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { xmlDoc=xmlhttp.responseXML; txt=""; x=xmlDoc.getElementsByTagName("ARTIST"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("myDiv").innerHTML=txt; } } xmlhttp.open("GET","cd_catalog.xml",true); xmlhttp.send(); } </script> </head> <body> <h2>My CD Collection:</h2> <div id="myDiv"></div> <button type="button" onclick="loadXMLDoc()">Get my CD collection</button> </body> </html>
例: innerHTML.xml ファイル<!DOCTYPE HTML>
<html>
<head>
<meta charset=utf-8" />
<title>Using responseText with innerHTML</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}
function startRequest(){
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET","innerHTML.xml",true);
xmlHttp.send(null);
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
document.getElementById("results").innerHTML=xmlHttp.responseText;
}
}
}
</script>
</head>
<body>
<form>
<input type="button" value="Search for Today's Activities" onclick="startRequest();"/>
</form>
<div id="results"></div>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<table border="1">
<tbody>
<tr><th>Activity Name</th><th>Location</th><th>Time</th></tr>
<tr><td>Waterskiing</td><td>Dock #1</td><td>9:00 AM</td></tr>
<tr><td>Volleyball</td><td>East Court</td><td>2:00 PM</td></tr>
<tr><td>Hiking</td><td>Trail 3</td><td>3:30 PM</td></tr>
</tbody>
</table>