AJAX проблема в интернет-проводнике!(код в настоящее время работает для Firefox и Chrome) - PullRequest
2 голосов
/ 23 мая 2011

Итак, у меня есть проект AJAX, который использует объект XmlHttpRequest для динамического извлечения данных со стороны сервера (в моем случае я использую JSON с PHP / MySQL в случае необходимости).Почти все мои HTML-элементы создаются динамически с помощью javascript DOM, поэтому эту работу выполняют файлы .js.

Вот типичный файл .js, который я использую для получения серверной информации из PHP, а затем создаю html:

var xmlHttp = createXmlHttpRequestObject(); 

function createXmlHttpRequestObject() {
    var xmlHttp; 
    try {
        xmlHttp = new XMLHttpRequest(); 
    } catch(e) {
        var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                            "MSXML2.XMLHTTP.5.0",
                            "MSXML2.XMLHTTP.4.0",
                            "MSXML2.XMLHTTP.3.0",
                            "MSXML2.XMLHTTP", 
                            "Microsoft.XMLHTTP"); 
        for(var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++) {
            try {
                xmlHttp = new ActiveXObject(XmlHttpVersions[i]); 
            } catch(e) {} 
        }
    }
    if (!xmlHttp) alert("Error creating XmlHttpRequest object."); 
    else { return xmlHttp; } 
} 

function initialize_main() {
    if (xmlHttp) {
        try {

            xmlHttp.open("GET", "main_php.php", true); 
            xmlHttp.onreadystatechange = handleMainStateChange; //call a function when the state changes
            xmlHttp.send(null); 
        } catch(e) {
            alert("Can't connect to server: " + e.toString());
        } 
    }
}

function handleMainStateChange() {
    if (xmlHttp.readyState==4) {
        if (xmlHttp.status==200) {  
            try {
                init_main(); 
            } catch(e) {
                alert("Error reading the response: " + e.toString()); 
            }
        } else {
            alert("There was a problem retrieving data: " + xmlHttp.statusText); 
        }
    }
}

function init_main() {

var data = JSON.parse(xmlHttp.responseText); 

//now do stuff with the DOM or w/e 

}

Так что, как я уже сказал, в Firefox и Chrome все круто.Но Internet Explorer говорит мне: «Ошибка чтения ответа: TypeError: Object не поддерживает это свойство или метод».Как вы можете догадаться, я немного новичок в AJAX, так что спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Я настоятельно рекомендую вам использовать JQuery, чтобы вы могли писать Javascript, который не заботится о типе браузера (JQuery делает это за вас): http://jquery.com/

0 голосов
/ 23 мая 2011

Попробуйте использовать эту функцию, у меня она работает для всех браузеров

function getXMLHTTP()
{
    var xmlhttp = false;
    try
    {
        xmlhttp = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e1)
            {
                xmlhttp = false;
            }
        }
    }
    return xmlhttp;
}
...