Различия в том, как XmlHttpRequest ведет себя в разных браузерах? - PullRequest
2 голосов
/ 12 ноября 2008

Я пытаюсь выяснить, в чем заключаются ошибки при использовании XmlHttpWebRequest, чтобы он работал для Safari, Firefox и IE?

Ответы [ 4 ]

3 голосов
/ 12 ноября 2008

Вероятно, наиболее очевидное различие заключается в том, как получить XMLHttpRequest.

var xhr;
if (window.XMLHttpRequest) {
   xhr = new XMLHttpRequest(); // Mozilla/Webkit/Opera
} else if (window.ActiveXObject) {
   xhr = new ActiveXObject('Msxml2.XMLHTTP'); // IE
} else {
   throw new Error('Ajax likely not supported');
}

Сказав это, я бы очень внимательно изучил библиотеку абстракций, такую ​​как jQuery . это делает вещи вроде Ajax до смешного легкими:

$('#container').load('/ajax/resource');
2 голосов
/ 12 ноября 2008

Существует очень хорошая статья обо всех основных ошибках, найденных в реализациях XMLHttpRequest и очень легкой реализации оболочки XMLHttpRequest , которая работает вокруг этих ошибок, в то же время выставляя точно такой же объект XMLHttpRequest .

1 голос
/ 12 ноября 2008

Вот кто-то, кто испачкал руки этим вопросом:

http://www.webmasterworld.com/javascript/3195000.htm

Один из основных способов исследования этих вопросов - взглянуть на исходный код библиотеки javascript, такой как jQuery, поскольку одна из функций библиотеки заключается в обработке различий. Вот фрагмент jQuery, который имеет дело с XMLHttpRequest. Обратите внимание на комментарии о различиях в браузере.

    // Create the request object; Microsoft failed to properly
    // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
    var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

    // Open the socket
    // Passing null username, generates a login popup on Opera (#2865)
    if( s.username )
        xhr.open(type, s.url, s.async, s.username, s.password);
    else
        xhr.open(type, s.url, s.async);

    // Need an extra try/catch for cross domain requests in Firefox 3
    try {
0 голосов
/ 12 ноября 2008

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

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