jquery - official - Recurso interpretado como Documento pero transferido con la aplicación de tipo MIME/advertencia json en Herramientas de desarrollo de Chrome
jquery version (7)
En realidad, es una peculiaridad en Chrome, no en la biblioteca de JavaScript. Aquí está la solución:
Para evitar que aparezca el mensaje y permitir que Chrome muestre la respuesta como JSON en la consola, agregue una cadena de consulta a su URL de solicitud.
p.ej
var xhr_object = new XMLHttpRequest();
var url = ''mysite.com/''; // Using this one, Chrome throws error
var url = ''mysite.com/?''; // Using this one, Chrome works
xhr_object.open(''POST'', url, false);
Tengo el siguiente fragmento, que usa el complemento jQuery Form para publicar un formulario en el servidor (en ajax).
var options = {
dataType: "json",
success: function(data) {
alert("success");
}
};
$form.ajaxSubmit(options);
La forma:
<form enctype="multipart/form-data" id="name_change_form" method="post" action="/my_account/">
<div style=''display:none''><input type=''hidden'' name=''csrfmiddlewaretoken'' value=''6c9b552aaba88b8442077e2957e69303'' /></div>
<table>
<tr>
<td>
<label for="id_first_name">First name</label>:
</td>
<td>
<input name="first_name" value="Patrick" maxlength="30" type="text" id="id_first_name" size="30" />
</td>
</tr>
<tr>
<td>
<label for="id_last_name">Last name</label>:
</td>
<td>
<input name="last_name" value="Sung" maxlength="30" type="text" id="id_last_name" size="30" />
</td>
</tr>
</table>
<input type="hidden" name="form_id" value="name_change_form" />
</form>
La implementación de Ajax está funcionando bien. Pero estoy recibiendo una advertencia
Recurso interpretado como Documento pero transferido con aplicación tipo MIME / json
en las herramientas para desarrolladores de Chrome Quiero averiguar por qué la advertencia, o mejor aún, una forma de resolverlo.
Cambié para usar $.post
y mágicamente el error desapareció desde entonces. No tengo idea de por qué funciona $.post
pero no $form.ajaxSubmit
. Si alguien puede ofrecer su explicación, sería genial. Por lo menos, este problema está resuelto. A continuación está el nuevo código.
var url = $form.attr("action");
$.post(
url,
$form.serialize(),
function(data) {
alert("success");
},
"json"
);
Estaba enfrentando el mismo error. La solución que funcionó para mí es:
Desde el extremo del servidor, al devolver la respuesta JSON, cambie el tipo de contenido: text / html
Ahora los navegadores (Chrome, Firefox e IE8) no dan un error.
Este tipo de advertencias generalmente se marcan debido a los encabezados HTTP de solicitud. Específicamente, el encabezado de solicitud de aceptación. La documentación de MDN para los estados de encabezados HTTP
The Accept request HTTP header advertises which content types, expressed as MIME types, the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and informs the client of its choice with the Content-Type response header. Browsers set adequate values for this header depending of the context where the request is done....
Es probable que application / json no esté en la lista de tipos MIME en el encabezado Accept enviado por el navegador, de ahí la advertencia.
Solución
Los encabezados HTTP personalizados solo pueden enviarse mediante programación mediante XMLHttpRequest o cualquiera de los contenedores de biblioteca js que lo implementan.
Esto me pasó a mí, y una vez que eliminé esto: enctype = "multipart / form-data" Comenzó a funcionar sin la advertencia
Tomé un enfoque diferente. Cambié para usar $ .post y el error se ha ido desde entonces.
Use dataType: "jsonp"
. Tuve el mismo error antes. Me arregló
simplemente puede usar JSON.stringify (opciones) convertir el objeto JSON en una cadena antes de enviar, luego rechazar la advertencia y funciona bien