Имя объекта должно следовать сразу за '&' (...) - PullRequest
2 голосов
/ 22 января 2012

Похоже на распространенную ошибку, но ни одно из найденных мной решений не оказалось успешным (замена & на & - одно). У меня есть простой 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 ]

4 голосов
/ 22 января 2012

Вы можете заключить скрипт в раздел CDATA:

<script type="text/javascript">
//<![CDATA[
document.write("&&");
//]]>
</script>
1 голос
/ 22 января 2012

Если у вас нет конкретной причины, самое чистое решение, как правило, заключается в перемещении вашего кода JavaScript во внешний файл.

Помимо избежания большинства странных проблем с браузерами, которые по-разному интерпретируют включенный javascript, он также делает вещи более кэшируемыми.

0 голосов
/ 22 января 2012

Юкка К. Корпела объяснил поведение режима причуд IE9 в комментарии к этому ответу

Это ошибка в IE 9 (в режиме «Причуды»), поскольку, согласно уточнениям, &#x2022 здесь допустимо. Но это всегда было хорошей и рекомендуемой практикой заключать все ссылки на сущности (например, &nbsp;) и ссылки на символы (например, &#233;) точкой с запятой, отчасти потому, что ее пропуск вызывал различные ошибки браузера.

Я не согласен с тем, что говорится в спецификации, но виновником может быть режим причуд IE9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...