jquery - net - ¿Cómo puedo convencer al IE de que simplemente muestre application/json en lugar de ofrecer descargarlo?
send input file ajax jquery mvc (9)
Al depurar 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.
Esto es bueno con ASPNET porque en el caso de un error de codificación, puedo ver el diagóstico de ASPNET en el navegador:
Pero cuando el código del servidor funciona correctamente y realmente devuelve JSON, IE me pide que lo descargue, por lo que no puedo ver la respuesta.
¿Puedo hacer que IE no haga eso, en otras palabras, simplemente mostrarlo como si fuera texto plano?
Sé que podría hacer esto si configuro el encabezado Content-Type para que sea 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.
Cambiar la configuración de mimo JSON de IE afectará la forma en que IE trata a todas las respuestas JSON.
Cambiar el encabezado mime-type a text / html indicará efectivamente a cualquier navegador que la respuesta JSON que está devolviendo no es JSON sino texto sin formato.
Ninguna de las opciones es preferible.
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.
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 usar 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 de 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 clic en una URL que devuelve un documento con Content-Type: application/json
o Content-Type: text/json
es así:
Qué hace, por qué funciona:
El 25336920-03F9-11cf-8FD0-00AA00686F13
es el CLSID de la acción "Buscar en el lugar". 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 ningún documento de aplicación / json descargado mediante etiquetas <script>
, oa 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 sugerencia provino de este sitio y del artículo de Microsoft sobre cómo manejar tipos MIME en Internet Explorer .
En FF, tampoco necesita un complemento externo. Puede usar view-source:
pseudo-protocol. Ingrese una URL como esta en la barra de direcciones:
view-source:http://myserver/MyUrl/That/emits/Application/json
Este pseudo-protocolo solía ser compatible con IE, también, hasta WinXP-sp2, cuando Microsoft lo desactivaba por razones de seguridad.
FireFox + FireBug es muy bueno para este propósito. Para IE, hay una barra de herramientas para desarrolladores que nunca he usado y tengo la intención de usar, así que no puedo proporcionar muchos comentarios.
La solución anterior le faltaba algo, y el código siguiente 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
Simplemente guárdelo en el archivo json.reg y ejecútelo para modificar su registro.
Puedes ver la respuesta en Fiddler: Fiddler
¡Esa es una buena herramienta para tales cosas!
Si está de acuerdo con que IE abra el JSON en un bloc de notas, puede cambiar el programa predeterminado de su sistema para los archivos .json al Bloc de notas.
Para hacerlo, cree o encuentre un archivo .json, haga clic con el botón derecho del mouse y seleccione "Abrir con" o "Elegir programa predeterminado".
Esto podría ser útil si, por casualidad, desea usar Internet Explorer, pero su compañía de TI no le permitirá editar su registro. De lo contrario, recomiendo las respuestas anteriores.
Solo tuve 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 de regedit aceptada a continuación lo solucionó. Gracias.
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 mucha búsqueda, vi que debe haber un encabezado en el resultado con un tipo de contenido, en mi caso, el tipo de contenido era:
header("Content-type: text/html; charset=iso-8859-1");
Pero cuando la página que realizó la solicitud recibe este json, en IE, debe especificarse EL MISMO TIPO DE CONTENIDO, en mi caso fue:
$.getJSON (
"<? site_url php echo (" ajax / tipoMenu ")?>"
{contentType: ''text / html; charset = utf-8''},
function (result) {
abrazos
Uso Fiddler con el complemento JSONViewer 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.