同じドメイン内のASPXページを要求する(Msxml2.XMLHTTP ActiveXオブジェクトを使用した)IEの標準の単純なAJAXクエリがあります。responseTextフィールドには完全なHTMLが含まれていますが、IEではresponseXMLフィールドは空白です(これはChromeでは問題なく機能します)。
デバッグプロセスの一環として、ASPXページをわずかなXMLに分解し、XMLバリデーターを実行して、入力ミスがないことを確認しました。ASPXページのコンテンツタイプを「text/xml」(IEはページをページプロパティでXMLドキュメントとして識別します)に変更し、エンコーディングを「utf-8」(ページレベルとグローバリゼーションタグの両方で)に変更しました。 web.configで)。
私のWebサービスがまったく同じコンテンツを返す場合、AJAXコードは問題ありません。同様に、AJAXは同じプロジェクト内のXMLファイル(コンテンツの正確な複製を含む)を問題なく読み取ることができます。解析できないように見えるのはASPXページだけです。
UpdatePanels(ASP.NET 3.5)で問題が発生しただけなので、純粋なjavascriptアプローチを使用します。
助言がありますか?私は何かが足りないのですか?
AJAXコード
function NavigateResults(query) {
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
// These are utilized for Microsoft IE browsers
try {
//alert('Boy... you should consider upgrading your browser.');
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
//alert('Whoa... no, seriously, you really need to upgrade!!!');
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
//alert("Yikes! Your browser does not support AJAX! Your inter-webs are broken! Call a 15-year old ASAP!");
window.location = url;
return false;
}
}
}
if (xmlHttp !== null) {
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
response = xmlHttp.responseXML;
var l_stringNode;
try {
l_stringNode = response.selectNodes("div")[0];
} catch (e) {
try {
l_stringNode = response.evaluate("div")[0];
} catch (e) {
l_stringNode = null;
}
}
alert("Response Text:\n\n" + xmlHttp.responseText);
alert("Response XML:\n\n" + xmlHttp.responseXML.xml);
//document.getElementById("SearchResultsDiv").innerHTML = xmlHttp.responseText;
if (l_stringNode !== null && l_stringNode.firstChild !== null) {
try {
var serializer = new XMLSerializer();
document.getElementById("SearchResultsDiv").innerHTML = serializer.serializeToString(l_stringNode);
} catch (e) {
// IE does not support serializeToString
document.getElementById("SearchResultsDiv").innerHTML = l_stringNode.xml;
}
}
}
}
var url = prompt("URL", "http://localhost:6168/Test.xml"); // + query + "&contType=xml");
xmlHttp.open("GET", url, true);
//prompt("URL", "http://localhost:4511/Service1.asmx/Autocomplete?prefix=test");
//xmlHttp.open("GET", "http://localhost:4511/Service1.asmx/Autocomplete?prefix=test", true);
xmlHttp.send(null);
}
}
テストXML (View Sourceを介してTest.aspxからコピーされ、XMLファイルとWebサービスからの応答と完全に一致します)
<?xml version="1.0"?>
<ul>
<li>Testacea</li>
<li>Testament</li>
<li>Testudinata</li>
</ul>