Веб-страницы в Firefox работают хорошо, но не в IE - PullRequest
0 голосов
/ 12 марта 2011

У меня есть следующий фрагмент кода:

self.xmlHttpReq = new XMLHttpRequest();

  self.xmlHttpReq.onreadystatechange = function()
  {
    if(self.xmlHttpReq.readyState == 4 && self.xmlHttpReq.status == 200)
    {
      xmlDoc = self.xmlHttpReq.responseXML;
      var xmlVar1 = xmlDoc.getElementsByTagName('var1')[0].childNodes[0].nodeValue;
      var xmlVar2 = xmlDoc.getElementsByTagName('var2')[0].childNodes[0].nodeValue;
    }
  }

В IE код ошибки говорит:

object required, ajax request.js line num, char num

Однако этот же запрос ajax отлично работает в Firefox.

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

IE и Firefox имеют разные имена объектов для XMLHttpRequest, вы должны проверить свой браузер и объявить новый объект на основе этого.

Попробуйте что-то вроде этого:

function getXHR() {
    var xhr = false;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            xhr = new ActiveXObject("msxml2.XMLHTTP");
        } catch(e) {
            try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                xhr = false;
            }
        }
    }
    return xhr;
}

Я получил это от Джереми Кейта некоторое время назад, это никогда не подводило меня.

2 голосов
/ 12 марта 2011

Internet Explorer не имеет объекта XMLHttpRequest.Вместо этого он использует объект ActiveX для той же функциональности.Итак, вам нужно изменить эту строку:

self.xmlHttpReq = new XMLHttpRequest();

на:

if (window.ActiveXObject) {
    try {
        self.xmlHttpReq = new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch (e) {
        self.xmlHttpReq = new ActiveXObject('Msxml2.XMLHTTP'); // for really old versions of IE. You can leave the try/catch out if you don't care to support browsers from the '90s.
    }
}
else
    self.xmlHttpReq = new XMLHttpRequest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...