javascript - ejemplos - Sigo recibiendo "Uncaught SyntaxError: Error inesperado o"
json to array javascript (7)
Asegúrese de que su archivo JSON no tenga ningún carácter final antes o después. Tal vez una imprimible? Es posible que desee probar de esta manera:
[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]
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 comencé a recibir un error, así que eliminé todo el código que había escrito, dejándome solo con una línea (la misma línea que había trabajado antes) ... solo 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 ahora:
[
{
"english": "bag",
"kana": "kaban",
"kanji": "K"
},
{
"english": "glasses",
"kana": "megane",
"kanji": "M"
}
]
Ahora el error se informa en la línea 11, que es la var glacier = JSON.parse(data);
línea.
Cuando elimino el archivo json, http://.../wokab.json el error "GET http://.../wokab.json 404 (No encontrado)", así que sé que lo está cargando (o al menos intentando).
Básicamente, si el encabezado de respuesta es texto / html, debe analizar y si el encabezado de respuesta es application / json, ya está analizado para usted.
Datos analizados de jquery success handler para texto / html response:
var parsed = JSON.parse(data);
Datos analizados del controlador de éxito de jquery para la respuesta de aplicación / json:
var parsed = data;
El problema es muy simple.
jQuery.get(''wokab.json'', function(data) {
var glacier = JSON.parse(data);
});
Lo estás analizando dos veces. get
usa el dataType=''json''
, por lo que los datos ya están en formato json. Use $.ajax({ dataType: ''json'' ...
para establecer específicamente el tipo de datos devuelto!
Otros consejos para errores de Unexpected token
. Hay dos diferencias principales entre los objetos javascript y json:
- Los datos de json siempre deben estar entre comillas dobles.
- las llaves deben ser citadas
Corrige 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 para esa pregunta. Pero es una respuesta para errores de Unexpected token
. Por lo tanto, puede ser de ayuda para otros que tropiezan con esa pregunta.
Parece que jQuery adivina el tipo de datos. Realiza el análisis JSON aunque no esté llamando a getJSON (); luego, cuando intenta llamar a JSON.parse () en un objeto, aparece el error.
Una explicación más detallada se puede encontrar en la respuesta de Aditya Mittal .
Simplemente la respuesta ya está analizada, no es necesario analizarla nuevamente. si lo analiza de nuevo, le dará "token o inesperado", sin embargo, tiene que especificar el tipo de datos en su solicitud para que sea del tipo dataType=''json''
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 la escena, y Chrome estaba agregando algo de basura a los datos entrantes que solo se mostrarían de forma intermitente y causaría el "Error de Sintaxis No Capturada: token Inesperado" error.
Estaba accediendo a los datos de iframe como este:
$(''#load-file-iframe'').contents().text()
que funcionó bien en localhost, pero cuando lo cargué en el servidor, dejó de funcionar solo con algunos archivos y solo cuando se cargan los archivos en un cierto orden. Realmente no sé qué lo causó, pero esto lo arregló. Cambié la línea de arriba a
$(''#load-file-iframe'').contents().find(''body'').text()
Una vez noté algo de basura en la respuesta HTML.
Larga historia breve, compruebe sus datos de respuesta HTML sin procesar y puede que aparezca algo.