Me estoy poniendo un «no bien formado» error en la consola de errores de Firefox 3.0.7 cuando el JavaScript en mi página carga un archivo de texto que contiene un objeto en JavaScript Object Notation formato. Si el archivo no contiene nada, pero el objeto JSON, se produce el error. Si me envuelve el objeto en <documento></documento> etiquetas que no produce el error. La solicitud se realiza correctamente, de cualquier manera, así que yo sólo podía ignorar, pero no quiero que mi error llenar el registro con estos mensajes.
Aquí está el código de ejemplo para ilustrar el problema. En primer lugar, la «no-forma» archivo llamado «de datos.json»:
{ a: 3 }
Ahora el código para cargar el archivo:
var req = new XMLHttpRequest();
req.open("GET", "data.json");
req.send(null);
El cual se produce el siguiente error en la consola de errores de Firefox:
no bien formado
file://ruta/a/los datos.json Línea: 1
{ a: 3 }
– ^
Si de datos.json es modificado para esto:
<document>{ a: 3 }</document>
No hay ningún error. Supuse que no se queja porque la llanura archivo JSON no es un documento XML bien formado, así que he intentado anular el tipo MIME antes de «enviar» llamado a la fuerza a la carga, como texto sin formato, pero que no funcionó.
var req = new XMLHttpRequest();
req.open("GET", "data.json");
req.overrideMimeType("text/plain");
req.send(null);
//Still produces an error!
Voy a seguir con envolver mis datos JSON en un documento XML para obtener todo lo que la validación de la XMLHttpRequest está realizando, pero me gustaría saber si hay alguna manera de que se me de la fuerza para cargar sólo texto sin formato acríticamente y no tratar de validar. Alternativamente, existe otro método de carga de datos, además de XMLHttpRequest, que puede ser utilizado con texto sin formato?
Has probado a utilizar el tipo MIME para JSON?
También puede configurar su servidor para enviar este tipo de MIME automáticamente .json archivos.
En primer lugar, la verdadera JSON es mucho más estricto que el de JavaScript, y para ser válida, JSON, usted tiene que tener sus llaves citado.
También, como usted está usando un desnudo de XMLHttpRequest, que en general se espera recibir un resultado XML menos encabezados MIME especificar estrictamente lo contrario.
Sin embargo, usted puede desear para hacer su vida más fácil, simplemente usando un framework JavaScript, como jQuery, que se abstraen de todo este problema para usted y para tratar con todas las desagradables casos de borde.
Además, si utiliza el estricto JSON y uso de la biblioteca, para abstracto para usted, cuando los navegadores comienzan a tener JSON nativo de los analizadores de la biblioteca podrá, de forma transparente a hacer uso de estos y obtener una importante mejora de la velocidad.
( Este está programado para pasar más pronto que tarde, y cuando esto sucede, sus usuarios tendrán una actualización silenciosa, sin ningún esfuerzo necesario! ).
$.getJSON()
todavía genera ese mensaje de error para mí.Esto también ocurre cuando el Tipo de Contenido está completamente vacía (eludiendo el tipo natural de detección).
Debe ser {«a»: 3} en realidad.
Me encontré con el mismo mensaje de error pero de una causa diferente. Después de un poco de tiempo infructuosamente de cambiar el contenido JSON, se dio cuenta de que accidentalmente había reiniciado la página que se ejecutan al sistema de archivos local (file://Users/me/Sites/mypage.html) en lugar de por el servidor (http://localhost/~me/Sites/mypage.html).
Yo también estaba recibiendo el mismo mensaje de advertencia con
XMLHttpRequest()
(en FireFox), cuando solicitando los recursos marcados comoContent-Type: application/json
por el servidor.Lo que hizo el truco para mí fue establecer explícitamente el
XMLHttpRequest.responseType
propiedadjson
en el objeto request. E. g,Firefox se ve en el HTTP Encabezado de Tipo de contenido.
Si el servidor HTTP de respuesta de encabezado no coincide con las expectativas de su navegador de código que se quejan de que con este mensaje.
Mi humilde opinión este mensaje de error podría haber sido mucho mejor, como «Esperando respuesta encabezado de Tipo de Contenido … pero encontré …».
Kent, no estoy de acuerdo.
La siguiente ES «válido» JSON:
Objeto de JavaScript nombres de propiedad NO tiene que ser cadenas.
El problema es el tipo MIME, no JSON/la sintaxis de JavaScript.
Me acaba de resolver esta cuestión mediante la adición de json como «text/javascript» a mi webserver de tipos mime del archivo:
El «no bien formado» error desapareció. El navegador (FireFox) asume, erróneamente, que la .json archivo XML.