Je n'arrête pas de recevoir "Uncaught SyntaxError: Unexpected token o"

j'essaie d'apprendre un peu de html/css/javascript, donc j'écris moi-même un projet d'enseignement.

l'idée était d'avoir un vocabulaire contenu dans un fichier json qui serait ensuite chargé dans une table. J'ai réussi à charger le fichier et imprimer un de ses valeurs, et après j'ai commencé à écrire le code pour charger les valeurs dans le tableau.

après avoir fait cela j'ai commencé à obtenir une erreur, donc j'ai enlevé tout le code que j'avais écrit, me laissant avec une seule ligne (la même ligne qui avait fonctionné auparavant) ... seulement l'erreur est toujours là.

L'erreur est la suivante:

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

mon code javascript est contenu dans un fichier séparé et est simplement ceci:

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

et mon fichier JSON a juste ce qui suit en ce moment:

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

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

maintenant l'erreur est signalée à la ligne 11 qui est la ligne var glacier = JSON.parse(data); .

quand je retire le fichier json je reçois l'erreur: "GET http://...- wokab.json 404 (introuvable)" je sais que c'est le chargement (ou au moins essayer).

293
demandé sur Lightness Races in Orbit 2011-11-10 19:11:24

7 réponses

ressemble à jQuery prend une conjecture sur le type de données. Il fait l'analyse JSON même si vous n'appelez pas getJSON()-- puis quand vous essayez d'appeler JSON.parse() sur un objet, vous obtenez l'erreur.

D'autres explications se trouvent dans réponse D'Aditya Mittal .

307
répondu ek_ny 2017-05-23 12:26:26

le problème est très simple

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

vous l'analysez deux fois. get utilise le dataType='json' , donc les données sont déjà dans le format json. Utilisez $.ajax({ dataType: 'json' ... pour définir spécifiquement le type de données retourné!

77
répondu Andrius Bentkus 2014-11-27 14:25:05

essentiellement si l'en-tête de réponse est text / html vous devez Parser, et si l'en-tête de réponse est application/json il est déjà parsé pour vous.

données analysées de jQuery success handler pour la réponse texte / html:

var parsed = JSON.parse(data);

données analysées de jQuery success handler for application / Réponse de json:

var parsed = data;
42
répondu Aditya Mittal 2015-11-03 00:55:38

un autre conseil pour les erreurs Unexpected token . Il y a deux différences majeures entre les objets javascript et json:

  1. les données de json doivent toujours être citées avec des guillemets.
  2. les clés doivent être citées

Corriger 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"
}

Remarque

Ce n'est pas une réponse directe à cette question. Mais c'est une réponse pour les erreurs Unexpected token . Donc, il peut être d'aider d'autres qui trébuchent sur cette question.

8
répondu Matthias M 2016-03-05 10:04:27

simplement la réponse est déjà analysée, vous n'avez pas besoin de l'analyser à nouveau. si vous l'analysez à nouveau, il vous donnera "unexpected token o" cependant, vous devez spécifier datatype dans votre demande pour être de type dataType='json'

2
répondu msoliman 2015-08-21 11:43:03

j'ai eu un problème similaire tout à l'heure et ma solution pourrait aider. J'utilise une iframe pour télécharger et convertir un fichier xml en json et le renvoyer dans les coulisses, et Chrome ajoutait des déchets aux données entrantes qui ne se montreraient que de façon intermittente et causeraient l'erreur "Uncaught SyntaxError: Unexpected token o".

j'accédais aux données iframe comme ceci:

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

qui fonctionnait bien sur localhost, mais quand j'ai téléchargé il a cessé de fonctionner seulement avec certains fichiers et seulement lors du chargement des fichiers dans un certain ordre. Je ne sais pas vraiment ce qui l'a causé, mais ça l'a réparé. J'ai changé la ligne ci-dessus en

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

une fois que j'ai remarqué quelques ordures dans la réponse HTML.

courte histoire vérifiez vos données brutes de réponse HTML et vous pourriez trouver quelque chose.

1
répondu Brandon 2011-11-19 13:53:16

assurez-vous que votre fichier JSON n'a pas de caractère arrière avant ou après. Peut-être une zone non imprimable? Vous pouvez essayer de cette façon:

[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]
0
répondu thexebolud 2011-11-19 14:06:35