2010-04-11 9 views
10

Estoy utilizando el método ajax de jQuery para adquirir un archivo JSON estático. Los datos se cargan desde el sistema de archivos local, por lo tanto no hay servidor, por lo que no puedo cambiar el tipo MIME.advertencia "no bien formada" al cargar el JSON del lado del cliente en Firefox a través de jQuery.ajax

Esto funciona bien en Safari, pero Firefox (3.6.3) informa que el archivo "no está bien formado". Soy consciente de, y revisado, un puesto similar aquí en desbordamiento de pila:

"not well-formed" error in Firefox when loading JSON file with XMLHttpRequest

Creo que está bien formado mi JSON:

{ 
    "_": ["appl", "goog", "yhoo", "vz", "t"] 
} 

Mi llamada AJAX es sencillo:

$.ajax({ 
    url: 'data/tickers.json', 
    dataType: 'json', 
    async: true, 
    data: null, 
    success: function(data, textStatus, request) { 
     callback(data); 
    } 
}); 

Si envuelvo el JSON con una etiqueta de documento:

<document>JSON data</document> 

como se mencionó en la otra pregunta de desbordamiento de pila a la que se hizo referencia anteriormente, la llamada ajax falla con un error de análisis.

Entonces, ¿hay alguna manera de evitar la advertencia de Firefox al leer en los archivos JSON del lado del cliente?

+0

Lo que sucede si * no * usa el elemento de envoltura raro? –

+0

Si no uso el envoltorio extraño, se cargan los datos JSON, pero obtengo la advertencia mal formada. – Zhami

Respuesta

37

A veces, el uso de un servidor HTTP no es una opción, lo que puede significar que los tipos MIME no se proporcionarán automáticamente para algunos archivos. Adaptado de la respuesta de Peter Hoffman por jQuery .getJSON Firefox 3 Syntax Error Undefined, utilice este código antes de hacer cualquier .getJSON $() llama:

$.ajaxSetup({beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
    xhr.overrideMimeType("application/json"); 
    } 
} 
}); 

O, si usted está utilizando $ .ajax():

$.ajax({ 
    url: url, 
    beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
     xhr.overrideMimeType("application/json"); 
    } 
    }, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 
+5

Sorprendentemente, parece que TODAVÍA se necesita en 2016 usando $ .getJSON(). –

+2

@ A.L.Flanagan Estoy continuamente sorprendido de que esto todavía reciba votos a favor. Estoy contento por los puntos que trae, pero estoy triste de que no se resuelva de alguna otra manera a través de la detección automática de solicitudes de archivos locales. – Ryan

+1

¡Gracias, eso funcionó para mí! Estoy usando jQuery localmente sin un servidor y solucionó mi problema. – Salvo

-4

Los archivos locales y las secuencias de comandos no se mezclan. Forma demasiadas cosas de seguridad del navegador y otras rarezas involucradas. Si desea probar cosas, debe ejecutar sus cosas a través de un servidor HTTP. Instalar uno localmente podría ser una buena idea.

Cuestiones relacionadas