Eu continuo recebendo “Untaught SyntaxError: token inesperado o”

Estou tentando aprender alguns html / css / javascript, então estou escrevendo um projeto de ensino.

A ideia era ter algum vocabulário contido em um arquivo json que seria então carregado em uma tabela. Consegui carregar o arquivo e imprimir um de seus valores, após o qual comecei a escrever o código para carregar os valores na tabela.

Depois de fazer isso eu comecei a receber um erro, então eu removi todo o código que eu tinha escrito, deixando-me com apenas uma linha (a mesma linha que tinha trabalhado antes) … apenas o erro ainda está lá.

O erro é o seguinte:

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 

Meu código javascript está contido em um arquivo separado e é simplesmente isto:

 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); }); } 

E meu arquivo JSON só tem o seguinte agora:

 [ { "english": "bag", "kana": "kaban", "kanji": "K" }, { "english": "glasses", "kana": "megane", "kanji": "M" } ] 

Agora o erro é relatado na linha 11, que é o var glacier = JSON.parse(data); linha.

Quando removo o arquivo json, recebo o erro: “GET http: //…/wokab.json 404 (Not Found)”, por isso sei que está carregando (ou pelo menos tentando).

Parece que o jQuery adivinha o tipo de dados. Ele faz a análise de JSON mesmo que você não esteja chamando getJSON () – então quando você tenta chamar JSON.parse () em um object, você está recebendo o erro.

Mais explicações podem ser encontradas na resposta de Aditya Mittal .

O problema é muito simples

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

Você está analisando duas vezes. get usa o dataType='json' , então os dados já estão no formato json. Use $.ajax({ dataType: 'json' ... para definir especificamente o tipo de dados retornado!

Basicamente, se o header de resposta for text / html, você precisará analisar e se o header de resposta for application / json, ele já será analisado para você.

Dados analisados ​​do manipulador de sucesso jquery para resposta text / html:

 var parsed = JSON.parse(data); 

Dados analisados ​​do manipulador de sucesso jquery para a resposta do aplicativo / json:

 var parsed = data; 

Outra sugestão para erros de Unexpected token . Existem duas grandes diferenças entre objects javascript e json:

  1. Os dados do json devem ser sempre citados com aspas duplas.
  2. as chaves devem ser citadas

JSON correto

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

Erro JSON 1

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

Erro JSON 2

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

Observação

Esta não é uma resposta direta para essa pergunta. Mas é uma resposta para erros de Unexpected token . Por isso, pode ser útil ajudar os outros que se deparam com essa questão.

Simplesmente a resposta já foi analisada, você não precisa analisá-la novamente. se você analisá-lo novamente, ele lhe dará “token inesperado”, mas você precisa especificar o tipo de dados em sua solicitação para ser do tipo dataType='json'

Eu tive um problema semelhante agora e minha solução pode ajudar. Estou usando um iframe para fazer o upload e converter um arquivo xml para json e enviá-lo de volta aos bastidores, e o Chrome adicionava algum lixo aos dados recebidos que só apareceriam intermitentemente e causariam o “Untaught SyntaxError: token inesperado o” erro.

Eu estava acessando os dados do iframe assim:

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

que funcionou bem em localhost, mas quando eu carreguei para o servidor parou de funcionar apenas com alguns arquivos e apenas ao carregar os arquivos em uma determinada ordem. Eu realmente não sei o que causou isso, mas isso consertou. Eu mudei a linha acima para

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

uma vez notei algum lixo na resposta HTML.

Longa história curta verificar seus dados de resposta HTML brutos e você pode transformar alguma coisa.

Certifique-se de que seu arquivo JSON não tenha nenhum caractere final antes ou depois. Talvez um não imprimível? Você pode querer tentar desta maneira:

 [{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]