这似乎是一个常见的错误,但我发现搜索的解决方案都没有成功(用&
替换&就是其中之一)。我有一个简单的Javascript(AJAX),其中包括几个double-if语句。该脚本在Chrome和Firefox中都能很好地工作,但在IE9中则不然,IE9在与Netbeans相同的行上报告错误(实体名称必须紧跟在"&"(…)后面)
希望这里的人能发现错误,或者为我应该去哪里寻找线索。
function getNames(str) {
var xmlhttp;
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
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 () {
// The line below is what produces the error.
if (xmlhttp.status == 200 && xmlhttp.readyState == 4) {
var arr = xmlhttp.responseText.split(",");
var ul = document.getElementById("names");
var li = document.createElement("li");
if (ul.hasChildNodes()) {
while (ul.childNodes.length >= 1) {
ul.removeChild(ul.firstChild);
}
}
for (var i = 0; i < arr.length; i++) {
if (arr[i] != ":@") {
var li = document.createElement("li");
li.innerHTML = newListItem = arr[i];
ul.insertBefore(li, ul.getElementsByTagName("li")[0]);
}
}
}
}
xmlhttp.open("GET", "./ext/get_names.php?q=" + str, true);
xmlhttp.send();
}
您可以将脚本包含在CDATA部分中:
<script type="text/javascript">
//<![CDATA[
document.write("&&");
//]]>
</script>
除非有特殊原因,否则最干净的解决方案通常是将javascript代码移动到外部文件。
除了避免浏览器以不同方式解释包含的javascript时出现的大多数奇怪问题外,它还使内容更具缓存性。
这是IE 9(在Quirks模式下)中的错误,因为根据规范,
•
在这里是有效的。但是,用分号结束所有实体引用(如
)和字符引用(如é
)一直是一种很好的建议做法,部分原因是省略它会引发各种浏览器错误。
我不同意规范中的说法,但IE9怪癖模式可能是罪魁祸首。