Сценарий Ajax не работает в IE8 - PullRequest
0 голосов
/ 09 марта 2012

Следующий скрипт выполняется и отлично работает в Safari, Chrome и Firefox, но не в IE8.К сожалению, IE8 - один из моих целевых браузеров, так что это небольшая проблема.Поскольку у меня нет большого опыта работы с Ajax, я не совсем уверен, с чего начать.

Я заметил, что IE сообщает об ошибке в строке 15 (помеченной **), которая нене имеет смысла, так как if-else должен помешать ему даже взглянуть на эту строку.

function getNames(str) {
    var xmlhttp;
    // Clear previous queries
    if(str.length == 0){
        document.getElementById("txtHint").innerHTML = "";
        return;
        // Due to the high number of possible hits we'll demand 3 chars
        // before we start querying.
    }else if(str.length < 3){
        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 (){        
        if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
            // String from get_names.php is comma separated
            var arr = xmlhttp.responseText.split(",");
            // The UL list we want our names in
            var ul = document.getElementById("names");

            // Clear the list for each key in
            if(ul.hasChildNodes()){
                while(ul.childNodes.length >= 1){
                    ul.removeChild(ul.firstChild);
                }
            }
            // Step trough the String in Array form
            for(var i = 0; i < arr.length; i++){
                // :@ means that we've reached the end of applicable names.
                if (arr[i] != ":@") {
                    var li = document.createElement("li");
                    li.innerHTML = newListItem = arr[i];
                    // Inserts the current name into the list.
                    ul.insertBefore(li, ul.getElementsByTagName("li")[0]);
                }
            }
        }
    }
    xmlhttp.open("GET", "./ext/get_names.php?q=" + str, true);
    xmlhttp.send();
}

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Насколько я знаю, проверка 'window.XMLHttpRequest' должна быть в порядке.

Вы можете попробовать взглянуть на этот ответ.В этом случае проблема заключалась в том, что нативный xmlhttprequest был отключен в настройках браузера.

0 голосов
/ 09 марта 2012

Вы должны сначала проверить readyState и , затем проверить статус. Это распространенная ошибка, которая сообщается, но игнорируется в большинстве браузеров. Я не уверен, что это решение вашей проблемы, но так как вы не предоставили сообщение об ошибке, вам будет трудно помочь вам в дальнейшем.

if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   // Code ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...