jQuery .getJSON Firefox 3 Error de syntax No definido

Obtengo un error de syntax (undefined line 1 test.js) en Firefox 3 cuando ejecuto este código. La alerta funciona correctamente (muestra ‘trabajo’) pero no tengo idea de por qué estoy recibiendo el error de syntax.

código jQuery:

$.getJSON("json/test.js", function(data) { alert(data[0].test); }); 

test.js:

 [{"test": "work"}] 

¿Algunas ideas? Estoy trabajando en esto para un archivo .js más grande, pero lo he reducido a este código. Lo que es una locura es que si reemplazo el archivo local con una ruta remota no hay ningún error de syntax (aquí hay un ejemplo):

http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?

Encontré una solución para patear ese error

 $.ajaxSetup({'beforeSend': function(xhr){ if (xhr.overrideMimeType) xhr.overrideMimeType("text/plain"); } }); 

Ahora la explicación: en Firefox 3 (y asumo solo Firefox TRES), cada archivo que tiene el tipo mime de “text / xml” se analiza y se comprueba la syntax. Si inicia su JSON con un “[” se generará un error de syntax, si comienza con “{” es un “error mal formado” (mi traducción para “nicht wohlgeformt”). Si accedo a mi json-file desde un script local, no se incluye ningún servidor en este progreso, tengo que anular el tipo de mime … Tal vez configures mal tu MIME-Type para ese mismo archivo …

Sin embargo, agregar este pequeño fragmento de código lo salvará de un mensaje de error

Editar: en jquery 1.5.1 o superior, puede usar la opción mimeType para lograr el mismo efecto. Para configurarlo como predeterminado para todas las solicitudes, use

 $.ajaxSetup({ mimeType: "text/plain" }); 

También puede usarlo con $ .ajax directamente, es decir, sus llamadas se traducen en

 $.ajax({ url: "json/test.js", dataType: "json", mimeType: "textPlain", success: function(data){ alert(data[0].test); } }); 

getJSON puede insistir en al menos un nombre: par de valores.
Una matriz recta ["item0","item1","Item2"] es JSON válida, pero no hay nada con lo que hacer referencia en la función de callback para getJSON.

En esta pequeña variedad de códigos postales:

 {"result":[["43001","ALEXANDRIA"],["43002","AMLIN"],["43003","ASHLEY"],["43004","BLACKLICK"],["43005","BLADENSBURG"],["43006","BRINKHAVEN"]]} 

… Estuve atascado hasta que agregué el {“resultado”: etiqueta. Después pude hacer referencia a esto:

  

… También encontré que era más fácil usar $ .each ().

Esto puede sonar realmente tonto, pero cambie la extensión de archivo para test.js de .js a .txt. Tuve la misma ocurrencia con archivos de datos JSON perfectamente válidos con bastante buena extensión excepto .txt (ejemplo: .json, .i18n). Como cambié la extensión, obtengo los datos y los uso muy bien.

Como dije, puede sonar tonto pero funcionó para mí.

HOLA

Tengo el mismo error al probar la página web en mi PC local, pero una vez que está en el servidor de alojamiento el error ya no ocurre. Lo siento, no tengo idea de la razón, pero pensé que podría ayudar a alguien a rastrear el motivo

Intente cambiar el nombre de “test.js” por “test.json”, que es lo que Wikipedia dice que es la extensión oficial de los archivos JSON. Tal vez se esté procesando como Javascript en algún momento.

¿Has intentado desactivar todas las extensiones de Firefox?

Normalmente recibo algunos errores en la consola de Firebug que son causados ​​por las extensiones, no por las webs que se visitan.

Verifique si hay ; al final de la test.js . jQuery ejecuta eval("(" + data + ")") y el punto y coma evitaría que Firefox encuentre el paréntesis de cierre. Y puede haber algunos otros personajes invisibles que le impidan hacerlo.

Sin embargo, puedo decirte por qué funciona esta ubicación remota, porque se ejecuta de manera completamente diferente. Ya que tiene jsoncallback=? como parte de los parámetros de consulta, jQuery lo considera como JSONP y lo inserta en el DOM dentro de las tags . Intenta usar "json/test.js?callback=?" como objective, podría ayudar también.

¿En qué tipo de servidor web está ejecutando eso? Una vez tuve un problema al leer un archivo JSON en IIS porque no estaba definido como un tipo MIME válido.

Intente configurar el tipo de contenido del archivo .js. Firefox espera que sea text / plain, aparentemente. Puede hacerlo como lo hace Peter Hoffmann arriba, o puede configurar el lado del servidor del encabezado de tipo de contenido.

Esto puede significar un cambio en la configuración del lado del servidor (como el archivo mime.types de apache), o si el json se sirve desde un script, estableciendo el encabezado de tipo de contenido en el script.

O al menos eso parece haber hecho que el error desaparezca para mí.

Tuve un problema similar pero estaba pasando por un bucle for. Creo que el problema podría ser que el índice está fuera de límite.

  • Kien

Para las personas que no usan jQuery, debe llamar al método overrideMimeType antes de enviar la solicitud:

 var r = new XMLHttpRequest(); r.open("GET", filepath, true); r.overrideMimeType("text/plain");