2012-01-17 17 views
15

Estoy usando IE8 y estoy enviando una solicitud de jax a on de la url que devuelve respuesta como json. El código de jQuery para la configuración ajax se da a continuación:IE8 trata la respuesta json como archivo e intenta descargarlo

$(document).ready(function(){ 
    $.ajax({ 
    url: url_string, 
    dataType: "json", 
    success: function(response){ 
     alert('all is well'); 
    }, 
    error: function(request, status, error){ 
     alert(request); 
     alert(status); 
     alert(error); 
    } 
    }); 
}); 

Estoy seguro de que el servidor envía la respuesta JSON, pero IE8 lo trata como archivo y abrir el cuadro descarga emergente. Pero el mismo proceso funciona bien para FF y Chrome. Esto todavía sucede cuando puedo reemplazar JSON a jsonp en tipoDatos

Pero siempre entra en el método de devolución de llamada de error.

Mi JSON cuerpo de la respuesta consiste en una cadena con etiquetas html también.

¿Alguna idea de por qué sucede esto?

Gracias

+0

se puede publicar las cabeceras de respuesta HTTP que está recibiendo de vuelta desde el servidor por favor? Use Fiddler (http://www.fiddler2.com/fiddler2/) para capturar. Oh, si eso va a un sitio web en desarrollo en 'localhost', es posible que tenga que cambiar a usar el nombre de su máquina o ipv4.fiddler como nombre de host una vez que lo tenga en ejecución. –

+0

copia bien forma cabecera de respuesta pegar FF encabezado de respuesta Fecha \t Mar 17 Ene 2012 10:21:48 GMT servidor \t Apache/2.2.12 (Ubuntu) X-Powered-By \t PHP/5.2.10-2ubuntu6 .10 Access-Control-Allow-Orig ... \t * Content-Length Content-Type \t application/json; charset = utf-8 X-Cache \t SRTA de localhost X-Cache-Lookup \t SRTA de localhost: 3128 Via \t 1,1 localhost: 3128 (squid/2.7.STABLE9) Conexión \t keep-alive – Gagan

+0

y este es el encabezado de respuesta que obtuve de fiddler HTTP/1.0 200 OK Fecha: martes, 17 de enero de 2012 11:45:41 GMT Servidor: Apache/2.2.12 (Ubuntu) X-Powered-By: PHP/5.2.10-2ubuntu6.10 Acceso-Control-Permitir -Origin: * Content-Length: 0 Content-Type: application/json; charset = UTF-8 X-Cache: falta de localhost X-Cache-búsqueda: falta de localhost: 3128 Vía: 1.1 localhost: 3128 (squid/2.7.STABLE9) conexion: keep-alive – Gagan

Respuesta

10

que tenía el mismo problema y se fija mediante el establecimiento de Content-type = "text/html" en la cabecera de respuesta para todas las solicitudes de IE (en lugar de "application/json ")

también escribí un post sobre ello con algo más de información: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/

+0

+1 Gracias. 'text/plain' también funciona. Parece que es lo mismo para IE8 y 9. IE10 parece asimilar 'application/json'. – Gray

+0

esto provoca una redirección en el mío. –

0

he modificado la url de su código y se utiliza la última versión de jQuery y funciona muy bien dentro de IE8 para mí

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
<script> 
    $(document).ready(function() {    
    $.ajax({      
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
        dataType: "json",      
     success: function(response){       
      alert('all is well');      
      alert($.param(response));     
     },      
     error: function(request, status, error){        
      alert(request);        
      alert(status);        
      alert(error); 
     }   
}); 
}); 
</script> 
</body> 
</html> 

Hay un problema conocido que se detallan en este answer donde IE8 tiene problemas con una coma adicional en una matriz de resultados. Verifique el contenido de la alerta de respuesta para esto.

+1

Gracias por su respuesta, pero esto no soluciona mi problema. Mi problema es por qué IE8 descargó la respuesta json como un archivo. Contenido: la longitud del encabezado de respuesta es 0 ya que la respuesta se trata como un archivo. – Gagan

+0

Sí, he visto eso en su comentario agregado después de responder. –

+0

¿Alguna vez se ha resuelto? Tengo el mismo problema ... –

3

Según lo que envíe el json, debe enviarlo como texto tipo mime. Así que en los raíles tuve que hacer esto.

render :text => my_array.to_json 

En lugar de

render :json => my_array 
Cuestiones relacionadas