2017-10-06 1 views
4

uniquement à la caisse et sur les pages de chaque produit que je reçois l'erreur suivante dans le journal de la console:Uncaught SyntaxError: jeton inattendu u JSON à la position 0

VM35594:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0 
    at JSON.parse (<anonymous>) 
    at run (layout.min.js:9) 
    at app.min.js:1 
    at main.min.js:2 
    at Object.execCb (require.min.js:112) 
    at Module.check (require.min.js:56) 
    at Module.<anonymous> (require.min.js:72) 
    at require.min.js:11 
    at require.min.js:74 
    at each (require.min.js:3) 

J'utilise une page par extension de la caisse, mais quand je désactiverai cela l'erreur montre toujours. Je pensais que cela pourrait avoir quelque chose à voir avec les critiques sur la page du produit (comme j'ai déplacé les commentaires sur les onglets), mais annuler ce changement n'a pas réparé l'erreur sur les pages de produits.

+8

Mon meilleur pari est que vous passez 'undefined' à' JSON.parse' – MinusFour

+1

Je suppose que "checkout" est une demande POST à ​​une page où vous allez commencer le paiement d'une commande droite? Avez-vous inspecté le JSON de cette requête HTTP POST? Je vais commencer à partir d'ici juste pour voir ce que vous envoyez est ce que vous pouvez gérer dans la page de paiement. – shadowsheep

+0

Ouvrez la console des outils de développement et voyez sur l'onglet réseau la réponse de votre script. Vous ne pouvez pas retourner un bon json. – AlexCode

Répondre

25

Essayez ceci dans la console:

JSON.parse(undefined) 

Voici ce que vous obtiendrez:

Uncaught SyntaxError: Unexpected token u in JSON at position 0 
    at JSON.parse (<anonymous>) 
    at <anonymous>:1:6 

En d'autres termes, votre application tente d'analyser undefined, qui n'est pas JSON valide.

Il y a deux causes communes à cela. La première est que vous pouvez référencer une propriété inexistante (ou même une variable inexistante si elle n'est pas en mode strict).

window.foobar = '{"some":"data"}'; 
JSON.parse(window.foobarn) // oops, misspelled! 

La deuxième cause commune est le défaut de recevoir le JSON en premier lieu, ce qui pourrait être causée par des scripts côté client qui ne tiennent pas compte des erreurs et envoyer une demande quand ils ne devraient pas.

Assurez-vous que vos scripts côté serveur et côté client s'exécutent dans strict mode et les lint en utilisant ESLint. Cela vous donnera assez confiance qu'il n'y a pas de fautes de frappe.

0

Ceci est dû à l'interférence messages qui arrive sur la page. Il y a plusieurs cadres sur la page qui communiquent avec la page en utilisant l'événement et l'objet de message de fenêtre. peu d'entre eux peuvent être des services tiers comme cookieq pour la gestion des cookies, ou peuvent être cartwire un service d'intégration e-com.

Vous devez gérer l'événement onmessage pour vérifier d'où proviennent les messages, puis analyser le JSON en conséquence.

je faisais face à un problème similaire, où l'on de l'intégration a été le passage d'un objet JSON et d'autres se passait une chaîne commençant par u

0

Comme @skiwi Holladay @MinusFour a commenté, vous analysez une variable undefined.
Essayez d'ajouter une condition if avant de procéder à l'analyse.

if (typeof test1 !== 'undefined') { test2 = JSON.parse(test1); }

Note: Ceci est juste un chèque de undefined cas. Tous les autres problèmes d'analyse doivent encore être traités.

+1

True, cela empêcherait le programme de se bloquer. Cependant, dans la plupart des cas, il est bon qu'un programme plante en cas d'entrée non valide. Cela dépend cependant de l'origine des données. D'une manière ou d'une autre, notez que beaucoup de choses sont des JSON invalides, pas seulement 'undefined', donc ce n'est pas vraiment une vérification robuste. https://www.nczonline.net/blog/2009/03/03/the-art-of-throwing-javascript-errors/ –

+0

True. Cela couvre simplement le 'jeton inattendu dans JSON à la position 0' et d'autres problèmes doivent encore être traités. Mettra à jour ma réponse. –