Что-то не так с этой короткой декларацией XMLHttpRequest? - PullRequest
2 голосов
/ 13 декабря 2011

Во всех AJAX-библиотеках, которые я извлек, XMLHttpRequest включает в себя длинное объявление с тестами или операторами try / catch.

Мне нужно получить XML с помощью запроса SOAP GET, и я успешно протестировал следующее объявление в IE7 +, Firefox и Chrome:

var xhr=new XMLHttpRequest()||new ActiveXObject("Microsoft.XMLHTTP");

Что мне здесь не хватает? Я пропустил некоторые крайние случаи, когда мое объявление сломается?

Редактировать

Таким образом, вторая часть объявления никогда не выполняется. Означает ли это, что для IE7 + / Firefox / Chrome мне просто нужно:

var xhr=new XMLHttpRequest();

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Вы пропустите случай для версий Internet Explorer, ниже 7:

new ActiveXObject("MSXML2.XMLHTTP");

Я думаю, что, например, имеется функция createRequest(), которую вам не нужно изменять, и возвращает хороший объект в зависимости отбраузер, содержащий try / catch для обработки ошибок, - лучший путь.

1 голос
/ 13 декабря 2011

new имеет приоритет, поэтому вы выполняете new XMLHttpRequest() и проверяете возвращаемое значение . Однако, если XMLHttpRequest не определено, это выполнение уже выдает ошибку. Скорее, вы хотите проверить, определен ли XMLHttpRequest перед применением new, например ::

var xhr = typeof XMLHttpRequest === "undefined"
            ? new ActiveXObject("Microsoft.XMLHTTP")
            : new XMLHttpRequest; // you can leave out the parens with no arguments
...