2009-01-08 53 views
37

La siguiente llamada AJAX falla en IE.solicitud jQuery AJAX que falla en IE

$.ajax({ 
    url:"{{SITE_URL}}/content/twitter.json", 
    dataType:"json", 
    error:function(xhr, status, errorThrown) { 
     alert(errorThrown+'\n'+status+'\n'+xhr.statusText); 
    }, 
    success:function(json) { 
       ...Snip... 
    } 
}); 

La función de error vuelve

Undefined 
parsererror 
OK 

Sin solicitud se realiza en el servidor así que no creo que es un problema con el JSON.

fijo, Ver # 1351389

+0

¿Está trabajando en otros navegadores? –

Respuesta

49

fijo, he cambiado el tipo de contenido de application/json; charset=utf8 a simplemente application/json.
odio IE :)

también para evitar el almacenamiento en caché de IE súper intente esto:

var d = new Date(); 
$.ajax({ 
     url:"{{SITE_URL}}/content/twitter.json?_="+d.getTime(), 
...Snip... 

De esa manera cada solicitud es un nuevo URL para IE llegar: D

+26

Dios, me alegro de haber encontrado esta respuesta. los días de mi vida que Microsoft no me devolverá. Solo para reiterar: yo también odio el IE. –

+13

Querido IE, te odio. Querido @Sam, te amo. – Gabe

+6

Odio IE también ... –

8

este es un copiar/pegar? Lo único que me atrapa todo el tiempo es dejar el último ',' en un constructor de objetos. es decir, la mayoría de los navegadores aceptan JS:

o = { a:1, b:2, c:3, }; 

pero IE se ahoga con esto porque la coma después del último elemento. cámbialo a:

o = { a:1, b:2, c:3 }; 

y funciona.

+0

Hombres - eres un bicho raro :) Me salvaste mucho tiempo. Tenga en cuenta que esto solo rompe IE7 y abajo. Desde IE8 esto no es un error de subida. – bksi

0

¿De qué se trata el {{SITE_URL}} envío de fragmentos? Intente mirar el código para ver el código fuente del navegador. Si el {{}} SITIO _URL trozo tiene una barra inclinada y que haría que la solicitud de URL:

 
http://modomain.com//content/twitter.json 

Lo que podría colarse a cabo IE?

+0

Bueno, cualquier navegador que conozca se infiltrará sobre eso ... así que este no es un problema específico de IE. – SamiSalami

3

IE caches AJAX solicita de forma realmente agresiva (más que Firefox, de todos modos). Debe configurar los encabezados de Cache-Control en la respuesta de manera adecuada si esto no es adecuado para su sitio.

+1

Buen punto, ¿se ha agregado? _ = 1234 al final y es decir, ahora solicite la página cada vez. Todavía el mismo problema :( – Sam

2

Un problema importante con los generados estáticamente JSON y IE son los principales "comas", para ejemplos Esto arroja un error en el IE:

{ 
    "one":"hello", 
    "two":"hi", 
} 

Nota la última coma.

48

Para el problema de almacenamiento en caché, ¿por qué no usa el parámetro cache: false?

$.ajax({ 
    url: "yoururl", 
    cache: false, 
    .... 
+0

Lo haré, aplausos por la sugerencia – Sam

+2

Me parece bastante extraño que esto no esté configurado como "falso" de forma predeterminada ... – Buchannon

+1

¡Salud, lo resolvió para mí! Tengo curiosidad por saber ¿Por qué IE no utiliza realmente la versión que almacena en caché ... –

6

En las versiones más nuevas de Internet Explorer (IE7) es necesario escribir la siguiente línea antes de llamar al $.ajax, de lo contrario, nunca llamaría a la función:

$.ajaxSetup({ cache: false }); //this line before $.ajax!!! 
$.ajax({ 
    //codes 
    //codes 
    //codes 
}); 
Cuestiones relacionadas