实体名称必须紧跟'&' (......)

时间:2012-01-22 15:56:12

标签: javascript ajax netbeans

似乎是一个常见错误,但我找到的搜索解决方案都没有被证明是成功的(替换& with &是一个)。我有一个简单的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();
}

3 个答案:

答案 0 :(得分:4)

您可以将脚本包含在CDATA部分中:

<script type="text/javascript">
//<![CDATA[
document.write("&&");
//]]>
</script>

答案 1 :(得分:1)

除非您有特殊原因,否则最干净的解决方案通常是将您的javascript代码移动到外部文件中。

除了避免浏览器解释包含javascript的大多数奇怪问题,它还使事情更容易缓存。

答案 2 :(得分:0)

Jukka K. Korpela在对this answer的评论中解释了IE9怪癖模式行为

  

这是IE 9中的错误(在Quirks模式下),因为通过注释,&#x2022在此处有效。但是,使用分号结束所有实体引用(如&nbsp;)和字符引用(如&#233;)一直是好的和推荐的做法,部分原因是省略它会触发各种浏览器错误。

我不同意规范的说法,但IE9怪癖模式可能是罪魁祸首。