2011-08-02 11 views
10

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?

+0

Tiene una lógica que ejecuta una función diferente para IE9.¿Cómo se ve doIe9Request()? Ese es el que está equivocando. –

+1

Sí, la solicitud de Ajax no falla. Simplemente no se ejecuta en IE9. – Tomm

+1

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

Respuesta

7

Bueno, finalmente encontré el problema. Resulta que, por alguna razón, jQuery/IE no edita comillas dobles de urlencode correctamente. La URL de la petición era:

/search.json?callback=jQuery16105234487927080267_1313510362362 & q = acciones o "mercado de valores" -blueprint -empireavenue.com -Aprender & _ = 1313510362469

En cualquier otro navegador por parte de la tiempo jQuery realiza la solicitud ajax que parecía:

/search.json?callback=jQuery16105234487927080267_1313510362362 & q = poblaciones% 20º o% 20% 22stock% 20market% 22% 20-blueprint% 20-empireavenue.com% 20-aprender & _ = 1313510362469

pero por alguna razón en todas las versiones de IE que salió de esta manera:

/search.json?callback=jQuery16105234487927080267_1313510362362 & q = stocks% 20o% 20 "de la 20market%" % 20% 20-plan-empireavenue .com% 20-learn & _ = 1313510362469

que causó que el servidor no devuelva datos.

1

¿Estás seguro de que la URL que estás llamando (/index.php?option=com_content&view=article&id=45&tmpl=component) funciona en IE9? Si carga esa página PHP en IE9, ¿devuelve el resultado esperado? Debería ser así, pero vale la pena comprobar que el error está en la llamada jQuery, en lugar del PHP.

Además, una llamada de POST normalmente sería a una página como 'index.php', con la cadena de consulta (option=com_content, view=article etc.) que como la variable postVars.

intente utilizar el siguiente:

$.ajax({ 
    type: "POST", 
    url: "index.php", 
    data: { 
     option : com_content, 
     view : article, 
     id : 45, 
     tmpl : component 
    }, 
    success: function(msg){ 
     console.log(msg); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus) 
    } 
}); 

tira hacia abajo la función de sus partes básicas, y usted debería ser capaz de ver donde está viniendo el error.

+0

Gracias por su respuesta. Intenté la URL en IE9 y funciona bien. Acabo de recibir un código de un dígito en el cuerpo HTTP, y nada más que sea como debería ser. Estoy pensando que tal vez sea algo en la configuración de mi servidor que a jQuery no le gusta con IE9. Es un sitio de Joomla y tengo varios módulos escritos por otras personas que presentan el mismo problema, todas sus llamadas jQuery ajax fallan en IE9, pero no en otros navegadores. He intentado con jQuery 1.5.2 y 1.6.2, ambos parecen ejecutar la devolución de llamada de error cuando no hay nada de malo en la solicitud que puedo ver. – rushinge

+0

He intentado usar tu código en jsfiddle.net (http://jsfiddle.net/chris5marsh/equkA/2/) y parece estar funcionando bien. Aunque tienen una etiqueta 'meta' en' head' con lo siguiente: '' Esto puede ser un Arregle por el momento: esencialmente le dice a la página que use IE7, que ha dicho que funciona para su código. Espero que esto ayude. – chris5marsh

Cuestiones relacionadas