【发布时间】:2011-12-08 03:56:16
【问题描述】:
我正在尝试在选择下拉列表中的值时执行一个简单的ajax请求来加载一些XML。 XML 包含我根据用户选择切换的图像路径。它在 Firefox 中运行良好(我没有收到任何 Javascript 错误),但由于某种原因,Chrome 中没有任何反应。这是我到目前为止所拥有的:
<script type="text/javascript">
function loadXMLDoc(url) {
var xmlhttp;
var txt, txtBase, txtOverlay1, txtOverlay2, txtBlack, name, img;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, & Safari
xmlhttp=new XMLHttpRequest();
xmlhttp.overrideMimeType("text/xml");
}
else {
// code for IE6 & IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
txtBase='<img id="original"';
txtOverlay1='<img id="overlay1" class="overlay"';
txtOverlay2='<img id="overlay2" class="overlay"';
txtBlack='<img id="opacity" class="overlay"';
img=xmlhttp.responseXML.documentElement.getElementsByTagName("IMG");
name=img[0].getElementsByTagName("NAME");
txtBase = txtBase + name[0].firstChild.nodeValue + '/>';
txtOverlay1 = txtOverlay1 + name[1].firstChild.nodeValue + '/>';
txtOverlay2 = txtOverlay2 + name[2].firstChild.nodeValue + '/>';
txtBlack = txtBlack + name[3].firstChild.nodeValue + '/>';
txt = txtBase + txtOverlay1 + txtOverlay2 + txtBlack;
document.getElementById('inner_container').innerHTML = txt;
$(".red").css({"font-size":"2.0em"});
$(".blue, .green").css({"font-size":"1.0em"});
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
</script>
我用这个来称呼它。
<select>
<option id="selected">Select a car</option>
<option onclick="loadXMLDoc('http://www.brandybrowauto.com/files/nissan.xml')">Nissan</option>
<option onclick="loadXMLDoc('http://www.brandybrowauto.com/files/mazdaspeed3.xml')">Mazdaspeed3</option>
</select>
非常感谢任何帮助使其在 Chrome 中工作的帮助,以及任何使代码更好的提示。我是 ajax 的初学者。
【问题讨论】:
-
您可能会发现使用 jQuery 更容易,它会为您处理 AJAX 跨浏览器兼容性。
-
鉴于您似乎已经在使用 jQuery 来设置 CSS,您也应该将它用于 Ajax。您可能还想使用它来创建新元素。 (至于 Chrome 中的实际问题 - 我不知道。)
-
我一直打算尝试将所有内容都切换到所有 jquery,但不幸的是,我刚刚进入 ajax 并且必须做很多研究。但与此同时,我必须做/不做一些愚蠢的事情,导致它甚至无法在 chrome 中加载 xml 文件。我尝试了 overrideMime 技巧,但无济于事。
标签: javascript xml ajax google-chrome