【问题标题】:The entity name must immediately follow the '&' (...)实体名称必须紧跟在 '&' (...)
【发布时间】:2012-01-22 15:56:12
【问题描述】:

似乎是一个常见错误,但我发现的所有解决方案都没有被证明是成功的(将 & 替换为 & 就是其中之一)。我有一个简单的 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();
}

【问题讨论】:

  • 我认为您需要将if (xmlhttp.status == 200 &amp;amp;&amp;amp; xmlhttp.readyState == 4) 替换为if (xmlhttp.status == 200 &amp;amp;&amp;amp; xmlhttp.readyState == 4)
  • 是的,我试过了。这完全破坏了所有浏览器中的脚本。
  • 然后尝试嵌套它:if (xmlhttp.status == 200) { if (xmlhttp.readyState == 4) {

标签: javascript ajax netbeans


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    除非您有特殊原因,否则最简洁的解决方案通常是将您的 javascript 代码移至外部文件。

    除了避免浏览器以不同方式解释包含的 javascript 时出现最奇怪的问题外,它还使内容更易于缓存。

    【讨论】:

    • 好吧,这取得了一些进展。 IE9 现在报告
      xmlhttp.status == 200
      正在产生“未指定的错误”.. 不管这意味着什么。我试过像 Paul Tomblin 建议的那样嵌套它们。
    • 如果您将脚本移动到外部文件中,您不需要转义或重新格式化任何内容,实际上您只需编写代码而不必担心它会包含在 html 页面中。例如,请参阅jibbering.com/faq/faq_notes/script_tags.html#hsExC
    • 是的。我现在回到原来的剧本。但是它在 IE 中仍然不起作用,但我想我应该为此创建另一个问题。谢谢。
    • 不要尝试编写自己的 xmlhttp 东西,只需使用 jquery - 它有一个“ajax”方法可以处理所有这些。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多