Tengo un sitio web donde hago una llamada ajax así:¿Por qué fracasa esta llamada jQuery Ajax SOLO en IE9 (Incluso funciona bien en IE8 e IE7)
// perform an ajax request to generate a new subscriber account
jQuery.ajax({
type: 'POST',
url: '/index.php?option=com_content&view=article&id=45&tmpl=component',
data: postVars,
success: handleResponse,
error: function(jqXHR, textStatus, errorThrown) {
alert ('response: ' + jqXHR.responseText);
alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
}
});
La página se solicita no hace todo menos devolver un código de estado de un solo dígito y funciona bien con todos los navegadores excepto IE9. La secuencia de comandos está alojada en el mismo dominio que la página que está solicitando, por lo que no debería haber ningún problema con las secuencias de comandos de dominios cruzados.
Finalmente encontré lo que está sucediendo, pero no sé cómo solucionarlo. Resulta que la solicitud de Ajax se completa con éxito sin problemas. Lo verifiqué usando Fiddler para ver el tráfico de la red. El servidor responde a la solicitud con un código de estado HTTP de 200 y el cuerpo no contiene nada más que un código de respuesta de un solo dígito. En este punto, jQuery ejecuta el controlador de errores, NO el controlador de éxito como se esperaría (en IE9). ¿Por qué lo hace y cómo puedo evitarlo? Esto SOLAMENTE sucede en IE9. ¡Incluso IE8 e IE7 funcionan bien con exactamente el mismo código! Como puede ver, finalmente recurrí a la detección de IE9 y el uso de un objeto XmlHttpRequest para hacerlo (que funciona bien por cierto).
Esto me parece un error de jQuery pero no puedo encontrar ninguna mención de ello en mis búsquedas. ¿De verdad soy el único que experimenta este extraño comportamiento?
Tiene una lógica que ejecuta una función diferente para IE9.¿Cómo se ve doIe9Request()? Ese es el que está equivocando. –
Sí, la solicitud de Ajax no falla. Simplemente no se ejecuta en IE9. – Tomm
La lógica separada se agregó después del hecho para solucionar el problema. Modifiqué la publicación original para reflejar el código con el que comencé y que falla en IE9 pero no en otros navegadores. – rushinge