实体名称必须紧跟'&'(...)
看起来像一个常见的错误,但我发现搜索的解决方案都没有证明成功(用&
代替&就是其中之一)。我有一个简单的Javascript(AJAX),其中包括一对双if语句。该脚本在Chrome和Firefox中均可正常工作,但在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();
}
除非你有特殊原因,最干净的解决方案通常是移动你的JavaScript代码到外部文件。
除了避免浏览器解释包含JavaScript的大多数奇怪问题,它还使事情更容易缓存。
好吧,那取得了一些进展。 IE9现在报告
xmlhttp.status == 200正在产生“未明确的错误”..不管是什么意思。我尝试过像Paul Tomblin所建议的那样嵌套它们。 –
如果您将脚本移动到外部文件中,则不需要转义或重新格式化任何内容,实际上,您应该编写代码而不必担心它会被包含在html页面中。例如,请参阅http://www.jibbering.com/faq/faq_notes/script_tags.html#hsExC。 –
是的。我现在回到原始脚本。但它仍然不能在IE中运行,但我想我应该为此创建另一个问题。 谢谢。 –
的Jukka K. Korpela说明一个IE9怪异模式行为评论到this answer
这是IE 9(在Quirks模式)的错误,因为由spefications,
•
在此处是有效。但是,一直以来都是很好的做法,推荐使用分号结束所有实体引用(如
)和字符引用(如é
),部分原因是忽略它引发了各种浏览器错误。
我不同意规范说什么,但IE9的怪癖模式可能是罪魁祸首。
可以CDATA部分中附上脚本:
<script type="text/javascript">
//<![CDATA[
document.write("&&");
//]]>
</script>
我认为你需要更换'如果(xmlhttp.status == 200 && xmlhttp.readyState == 4)'和'如果(xmlhttp.status == 200 & & xmlhttp.readyState == 4)' –
叶,我试过了。这在所有浏览器中完全破坏了脚本。 –
尝试嵌套它然后:'if(xmlhttp.status == 200){if(xmlhttp.readyState == 4){' –