2010-03-20 5 views
148

Al depurar las aplicaciones jQuery que usan AJAX, a menudo tengo la necesidad de ver el json que el servicio está devolviendo al navegador. Así que voy a soltar la URL de los datos JSON en la barra de direcciones.¿Cómo puedo convencer al IE de que simplemente muestre la aplicación/json en lugar de ofrecer descargarla?

Ésta es agradable con ASPNET ya que en caso de un error de codificación, puedo ver el diagostic ASPNET en el navegador:

alt text

Pero cuando el código del lado del servidor funciona correctamente y, de hecho devuelve JSON , IE me pide que lo descargue, por lo que no puedo ver la respuesta.

alt text

¿Puedo obtener IE no hace eso, en otras palabras, que acaba de mostrarlo como si se tratara de texto plano?

Sé que podría hacer esto si configuro el encabezado Content-Type como text/plain.

Pero este es específicamente el contexto de una aplicación ASPNET MVC, que establece la respuesta automágicamente cuando uso JsonResult en uno de mis métodos de acción. También quiero mantener el tipo de contenido apropiado, y no cambiarlo solo para apoyar los esfuerzos de depuración.

+0

Firefox 3/4 también hace esto, si tiene una máquina que no se ha actualizado. –

+6

¡Me gusta el uso de "convencer" !! – adardesign

+0

Probablemente pueda convencer al equipo de IE al votar esta [solicitud de función] (https://connect.microsoft.com/IE/feedback/details/793307/text-json-mimetype). –

Respuesta

207

Encontré la respuesta.

Puede configurar IE8 para mostrar la aplicación/json en la ventana del navegador actualizando el registro. No hay necesidad de una herramienta externa. No he probado esto ampliamente, pero funciona con IE8 en Vista.

Para utilizar esto, recuerde, se aplican todas las advertencias habituales sobre la actualización del registro. Detener IE. Luego, corte y pegue lo siguiente en un archivo, con el nombre json-ie.reg.

Windows Registry Editor Version 5.00 
; 
; Tell IE to open JSON documents in the browser. 
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" . 
; 

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json] 
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" 
"Encoding"=hex:08,00,00,00 

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json] 
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" 
"Encoding"=hex:08,00,00,00 

Luego haga doble clic en el archivo .reg. Reinicie IE. El nuevo comportamiento que se obtiene al hacer cosquillas una URL que devuelve un documento con Content-Type: application/json o Content-Type: text/json es así:

alt text

Lo que hace, por qué funciona:

la 25336920-03F9-11cf-8FD0-00AA00686F13 es el CLSID para el " Navegar en el lugar "acción". Básicamente, esta entrada de registro le dice a IE que para los documentos que tienen un tipo mime de application/json, simplemente visualízalo en su lugar. Esto no afectará a los documentos de aplicación/json descargados a través de las etiquetas <script>, ni a través de XHR, y así sucesivamente.

Las claves CLSID y Codificación obtienen los mismos valores utilizados para image/gif, image/jpeg y text/html.

Esta pista vino de this site, y del artículo de Microsoft Handling MIME Types in Internet Explorer.


En FF, tampoco necesita un complemento externo. Solo puede usar el pseudo protocolo view-source:. Ingrese una URL como esta en la barra de direcciones:

view-source:http://myserver/MyUrl/That/emits/Application/json 

Este pseudo-protocolo utilizado para ser apoyado en el IE, también, hasta WinXP-sp2, cuando Microsoft deshabilitado por razones de seguridad.

+26

+1 por no aceptar un no por respuesta. Me gusta. –

+2

Oye, algunas observaciones que pueden ayudar a su publicación - http://skysanders.net/subtext/archive/2010/03/23/coerce-windows-and-internet-explorer-ie-to-diplay-json-text. aspx –

+0

Esto también funciona en IE7. – Paul

0

FireFox + FireBug es muy bueno para este propósito. Para IE hay un developer toolbar que nunca he usado y tengo la intención de usar, así que no puedo proporcionar muchos comentarios.

+0

sí, conozco el plugin FF que permite la visualización de la aplicación/json como texto normal. Sin embargo, específicamente quiero saber sobre IE. – Cheeso

+0

Hay una barra de herramientas de desarrollador para IE. Por cierto aquí hay una buena comparación de diferentes herramientas para desarrolladores: http://elegantcode.com/2009/05/18/firefoxfirebug-vs-ie8-developer-toolbar/ –

1

Yo uso Fiddler con JSONViewer complemento para inspeccionar JSON. No creo que sea posible hacer que IE se comporte sin tocar el registro tal vez. Here's algo de información.

14

Tuve un problema similar. Estaba usando el jQuery "$. GetJSON" y todo funcionó perfectamente en Firefox y Chrome.

Pero no funcionó en IE. Así que traté de acceder directamente a la URL de json, pero en IE me preguntó si quería descargar el archivo.

Después de mucho buscar he visto que tiene que haber un encabezado en el resultado con un tipo de contenido, en mi caso, el tipo de contenido fue:

header("Content-type: text/html; charset=iso-8859-1"); 

Pero cuando la página que hizo la solicitud recibe este JSON, en IE, que tiene que ser especificado MISMO Content-Type, en mi caso fue:

$.getJSON (
"<? site_url php echo (" ajax/tipoMenu ")?>" 
{contentType: 'text/html; charset = utf-8'}, 
function (result) { 

abrazos

+0

Esto funcionó para mí, no se requiere jugar con el registro, solo cambie el encabezado de respuesta también "text/html". – 64k

+2

¿Cómo funciona esto en IE7 al hacer una llamada Ajax y recibe json como resultado? No estoy usando getJSON, sino más bien una llamada .ajax.He usado ese tipo de contenido en respuesta y encabezado y no ayuda en absoluto. Tampoco lo hizo usando json2.js. ¿Alguien tiene implementaciones exitosas de esto que funcionan en ie7? IE7 representa más del 30% de nuestros usuarios. Triste pero cierto, y un cambio de clave reg no es una opción. Decirle a un millón de usuarios del gobierno que solo ejecuten un registro no funcionará. –

+0

Sé que esta es una pregunta antigua, pero se repite, así que aquí está la respuesta: la pregunta original pertenece a DESARROLLADORES que están depurando la recuperación de JSON. Se sugiere modificar el registro como un paso para ayudar a esos desarrolladores. Modyfing el registro no es recomendado o sugerido para usuarios generales. Además: NUNCA existe la necesidad de usuarios regulares (= un millón de usuarios del gobierno) para ver JSON en el navegador. – Cheeso

1

Cambio de la configuración de tipo MIME JSON de IE afectarán a la forma en IE trata todas respuestas JSON.

Al cambiar el encabezado mime-type a text/html se le indicará efectivamente a cualquier navegador que la respuesta JSON que está devolviendo no es JSON sino texto sin formato.

No se prefieren las dos opciones.

En su lugar, le conviene usar un complemento o herramienta como el Fiddler mencionado anteriormente o cualquier otro proxy de inspector de tráfico de red donde puede elegir cada vez cómo procesar la respuesta JSON.

+2

'text/html' no le dice al navegador que la respuesta es texto plano, pero HTML. Si decides que quieres texto sin formato, usa 'text/plain'. De lo contrario, puede terminar con algunas vulnerabilidades XSS interesantes. –

2

Si está de acuerdo con simplemente tener IE abra el JSON en un bloc de notas, puede cambiar el programa predeterminado de su sistema para archivos .json a Bloc de notas.

Para hacer esto, cree o encuentre un archivo .json, haga clic con el botón derecho del mouse y seleccione "Abrir con" o "Elegir programa predeterminado".

Esto puede ser útil si, por casualidad, desea utilizar Internet Explorer, pero su compañía de TI no le permitirá editar su registro. De lo contrario, recomiendo las respuestas anteriores.

8

encima solución faltaba algo, y por debajo de código debería funcionar en todas las situaciones:

Windows Registry Editor Version 5.00 
; 
; Tell IE to open JSON documents in the browser. 
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" . 
; 

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json] 
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" 
"Encoding"=hex:08,00,00,00 

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json] 
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" 
"Encoding"=hex:08,00,00,00 

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json] 
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" 
"Encoding"=hex:08,00,00,00 

Sólo tiene que guardar el archivo que json.reg, y correr a modificar su registro.

0

Acabo de tener el mismo problema con XMLHttpRequest.El sitio funciona sin problemas en Chrome y FF, y en docenas y decenas de navegadores de Internet Explorer en producción. Esta máquina ONE (la que nuestra compañía está configurando para ser una máquina de demostración, por supuesto) decidió que iba a solicitar que se guardara la respuesta json a una solicitud de Ajax.

La solución regedit aceptada a continuación lo solucionó. Gracias.

Cuestiones relacionadas