Прототипы Internet Explorer 8 и XMLHttpRequest - PullRequest
3 голосов
/ 20 марта 2009

Частично это запрос на обходной путь, а частично попытка получить слово, что реализация прототипа Internet Explorer все еще не работает.

Следующий код не работает в Internet Explorer.

XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open;
var x = new XMLHttpRequest();
x.old("POST", "test", false);

Для бета-версии IE 8 и всех предыдущих версий свойство XMLHttpRequest.prototype никогда не существовало. В IE8 он существует, но вы получите ошибку «Недопустимый вызов процедуры или аргумент». Internet Explorer не любит украшения.

Кто-нибудь знает обходной путь для этого?

Обновление :

Указывалось, что я могу переопределить весь XMLHttpRequest с помощью новой функции и конструктора, а затем создать скрипт-оболочку ala XMLHttpRequest.js. Метод прототипа намного короче, поэтому я все же предпочел бы использовать его для браузеров, отличных от IE.

1 Ответ

2 голосов
/ 24 мая 2012

Кажется, проблема в том, что IE 8 распознает XMLHttpRequest, но не как функцию. Активные объекты X все еще работают. Вместо того, чтобы проверять наличие window.XMLHtppRequest, я проверяю тип window.XMLHtppRequest. кажется, работает хорошо.

Я перекодировал свой запрос на получение следующим образом:

FG.ajax.getxhr = function(){
var xhr;
if (typeof window.XMLHttpRequest === 'function') {
    xhr  = XMLHttpRequest();
}
else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; 
...