Sigo recibiendo " SyntaxError no capturado: token inesperado o"


Estoy tratando de aprender algo de html / css / javascript, así que estoy escribiendo un proyecto de enseñanza.

La idea era tener un vocabulario contenido en un archivo json que luego se cargaría en una tabla. Logré cargar el archivo e imprimir uno de sus valores, después de lo cual comencé a escribir el código para cargar los valores en la tabla.

Después de hacer eso empecé a recibir un error, así que eliminé todo el código que había escrito, dejándome con una sola línea (la misma línea que tenía trabajado antes) ... sólo el error sigue ahí.

El error es el siguiente:

Uncaught SyntaxError: Unexpected token o
(anonymous function)script.js:10
jQuery.Callbacks.firejquery-1.7.js:1064
jQuery.Callbacks.self.fireWithjquery-1.7.js:1182
donejquery-1.7.js:7454
jQuery.ajaxTransport.send.callback

Mi código javascript está contenido en un archivo separado y es simplemente esto:

function loadPageIntoDiv(){
    document.getElementById("wokabWeeks").style.display = "block";
}

function loadWokab(){
    //also tried getJSON which threw the same error
    jQuery.get('wokab.json', function(data) {
        var glacier = JSON.parse(data);
    });
}

Y mi archivo JSON solo tiene lo siguiente en este momento:

[
    {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    },

    {
        "english": "glasses",
        "kana": "megane",
        "kanji": "M"
    }
]

Ahora el error se reporta en la línea 11 que es la línea var glacier = JSON.parse(data);.

Cuando elimino el archivo json obtengo el error: "GET http://.../ wokab.json 404 (No encontrado)" así que sé que lo está cargando (o al menos lo está intentando).

Author: Lightness Races in Orbit, 2011-11-10

7 answers

Parece que jQuery adivina el tipo de datos. Hace el análisis JSON aunque no estés llamando a getJSON () then entonces cuando intentes llamar a JSON.parse() en un objeto, estás obteniendo el error.

Se puede encontrar más explicación en La respuesta de Aditya Mittal.

 307
Author: ek_ny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:26

El problema es muy simple

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});

Lo estás analizando dos veces. get usa dataType='json', por lo que los datos ya están en formato json. Utilice $.ajax({ dataType: 'json' ... para establecer específicamente el tipo de datos devuelto!

 77
Author: Andrius Bentkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-27 14:25:05

Básicamente si el encabezado de la respuesta es text/html, necesita analizar, y si el encabezado de la respuesta es application/json, ya está analizado para usted.

Datos analizados de jquery success handler para respuesta de texto / html:

var parsed = JSON.parse(data);

Datos analizados de jquery success handler para application / json response:

var parsed = data;
 42
Author: Aditya Mittal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-03 00:55:38

Otra pista para errores Unexpected token. Hay dos diferencias principales entre los objetos javascript y json:

  1. los datos json deben ser siempre citados con comillas dobles.
  2. las claves deben ser citadas

Correct JSON

 {
    "english": "bag",
    "kana": "kaban",
    "kanji": "K"
}

Error JSON 1

 {
    'english': 'bag',
    'kana': 'kaban',
    'kanji': 'K'
 }

Error JSON 2

 {
    english: "bag",
    kana: "kaban",
    kanji: "K"
}

Observación

Esta no es una respuesta directa a esa pregunta. Pero es una respuesta para Unexpected token errores. Así que puede ser ayudar a otros que tropiece con esa pregunta.

 8
Author: Matthias M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-05 10:04:27

Simplemente la respuesta ya está analizada, no es necesario analizarla de nuevo. si lo analiza de nuevo, le dará "token inesperado o", sin embargo, debe especificar el tipo de datos en su solicitud para que sea de tipo dataType='json'

 2
Author: msoliman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-21 11:43:03

Tuve un problema similar en este momento y mi solución podría ayudar. Estoy usando un iframe para cargar y convertir un archivo xml a json y enviarlo detrás de las escenas, y Chrome estaba agregando algo de basura a los datos entrantes que solo se mostrarían intermitentemente y causarían el error "Uncaught SyntaxError: Unexpected token o".

Estaba accediendo a los datos del iframe de esta manera:

$('#load-file-iframe').contents().text()

Que funcionó bien en localhost, pero cuando lo subí al servidor dejó de funcionar solo con algunos archivos y solo cuando se cargan los archivos en un orden determinado. Realmente no sé qué lo causó, pero esto lo arregló. Cambié la línea anterior a

$('#load-file-iframe').contents().find('body').text()

Una vez noté algo de basura en la respuesta HTML.

Larga historia corta compruebe sus datos de respuesta HTML sin procesar y es posible que aparezca algo.

 1
Author: Brandon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-19 13:53:16

Asegúrese de que su archivo JSON no tenga ningún carácter final antes o después. Tal vez un área no imprimible uno? Es posible que desee probar de esta manera:

[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]
 0
Author: thexebolud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-19 14:06:35