Jquery Ajax, não está funcionando no Internet Explorer
Estou tentando fazer alguns ajax jQuery e funciona em Firfox e Chrome, mas não no Internet Explorer 9.
O código final terá que passar por subdomínios, e isso não funciona no IE com o transporte padrão.
Então, eu estou tentando criar um transporte personalizado para usar no Internet Explorer
Método 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();
}
};
}
});
Eu criei uma página de amostra simples para demonstrar a primeira técnica aqui:http://services.whygo.net/sendAjax.htm
Observe que, se você usar o transporte personalizado, o transporte normal falhará, a menos que você atualize
A ideia vem daqui:http://forum.jquery.com/topic/cross-domain-ajax-and-ie#14737000002203097
Isto não dá nenhuma mensagem de erro diferente de 'error' dentro do método 'error' chamado $ ajax, quando falhar. Eu recebo um 405 Method não permitido na aba 'Network' de if dev tools, mas o material do lado do servidor é executado.
Método 2 Eu também tentei outro método como descrito aqui:O subdomínio cruzado AJAX funciona no Chrome, não no IE
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
// override default jQuery transport
jQuery.ajaxSettings.xhr = function() {
try { return new XDomainRequest(); }
catch(e) { }
};
}
Isso pode ser encontrado aqui:http://www.whygo.net/sendAjax2.html
Neste eu realmente recebo 200 códigos na aba 'network' das ferramentas ie dev, mas não chamam o 'error' ou o 'success' parar de $ ajax.
Se eu colocar um timeout nesse segundo, ele retornará para a função 'error' com uma mensagem de 'timeout'.