Я пытаюсь сделать jQuery ajax, и он работает в Firfox и Chrome, но не в Internet explorer 9.
Конечный код должен будет проходить через поддомены, и это не работает, т.е. с транспортом по умолчанию.
Итак, я пытаюсь создать настраиваемый транспорт для использования в Internet Explorer
Метод 1
$.ajaxTransport("+*", function (options, originalOptions, jqXHR) {
if (jQuery.browser.msie && window.XDomainRequest) {
var xdr;
return {
send: function (headers, completeCallback) {
// Use Microsoft XDR
xdr = new XDomainRequest();
xdr.open("get", options.url);
xdr.onload = function () {
if (this.contentType.match(/\/xml/)) {
var dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async = false;
dom.loadXML(this.responseText);
completeCallback(200, "success", [dom]);
} else {
completeCallback(200, "success", [this.responseText]);
}
};
xdr.ontimeout = function () {
completeCallback(408, "error", ["The request timed out."]);
};
xdr.onerror = function () {
completeCallback(404, "error", ["The requested resource could not be found."]);
};
xdr.send();
},
abort: function () {
if (xdr) xdr.abort();
}
};
}
});
Я создал простую примерную страницу, чтобы продемонстрировать первую технику здесь: http://services.whygo.net/sendAjax.htm
Обратите внимание, что если вы используете настраиваемый перенос, нормальная транспортировка завершится неудачей, если вы не обновите
Идея исходит отсюда: http://forum.jquery.com/topic/cross-domain-ajax-and-ie#14737000002203097
Это не дает сообщения об ошибке, кроме "ошибки" внутри метода "error", вызываемого в $ajax, когда он терпит неудачу. Я получаю метод 405, который не разрешен на вкладке "Сеть", если инструменты dev, но выполняются элементы на стороне сервера.
Метод 2 Я также попробовал другой метод, описанный здесь: Перекрестный субдомен AJAX работает в Chrome, а не в IE
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
// override default jQuery transport
jQuery.ajaxSettings.xhr = function() {
try { return new XDomainRequest(); }
catch(e) { }
};
}
Это можно найти здесь: http://www.whygo.net/sendAjax2.html
На этом я фактически получаю 200 кодов на вкладке "сеть", то есть dev tools, но не вызывает "ошибку" или "успех" pararm $ajax.
Если я поставлю таймаут на этот второй, то он вернется к функции "error" с сообщением "timeout".