web-dev-qa-db-fra.com

Chrome: Uncaught SyntaxError: Fin d'entrée inattendue

Lors du chargement de ma page dans Google Chrome, j'obtiens une vague erreur dans la console:

Uncaught SyntaxError: Fin d'entrée inattendue

Je n'ai aucune idée de ce qui le cause. Comment pourrais-je procéder pour déboguer cette erreur?

150
dlaurent86

Cette erreur particulière est un fait agaçant à propos de v8 . Dans la plupart des cas, votre JavaScript est cassé d'une manière ou d'une autre. Par exemple, il manque un } ou quelque chose comme ça.

Exemple donné, cela donnera aussi "fin inattendue de l’entrée": 

eval('[{"test": 4}') // notice the missing ]

Mais la cause fondamentale des problèmes semble être que l’URL JSON demandée a un Content-Type de text/html que Chrome semble apparemment analyser en HTML, ce qui entraîne une fin inattendue de la saisie du fait que le les balises d'image incluses sont en cours d'analyse.

Essayez de régler Content-Type sur text/plain Je pense que cela devrait résoudre les problèmes.

Néanmoins, la V8 pourrait faire un meilleur travail en disant à l’un exactement l’entrée s’est terminée de manière inattendue. 

206
Ivo Wetzel

Essayez Firebug pour Mozilla - il affichera la position du } manquant. 

http://getfirebug.com/

69
user669677

Voir mon cas sur un autre question similaire :

Dans mon cas, j'essayais d'analyser un JSON vide:

JSON.parse(stringifiedJSON);

En d'autres termes, ce qui s'est passé est le suivant:

JSON.parse("");
32
falsarella

Je reçois cette erreur lorsque j'ai omis un caractère d'accolade de fermeture (}) en code JavaScript. Vérifiez que vos bretelles sont bien équilibrées.

10
HBP

Pour mémoire, pour tous ceux qui essaient de trouver les différentes causes de cette erreur. Un attribut de données HTML5 vide

data-mydata = ''

provoque l'erreur aussi. Vous devriez vérifier quand la valeur de données est une chaîne nulle et ne pas inclure l'attribut du tout. Il va sans dire que cela concerne en grande partie le code HTML généré par script.

9
DroidOS

Le problème pour moi était que je faisais $ .ajax avec dataType: "json" pour une demande POST renvoyant un HTTP 201 (créé) et aucun corps de demande. Le correctif consistait simplement à supprimer cette clé/valeur.

8
Blaskovicz

JSHint est efficace pour trouver l'emplacement des crochets manquants ou d'une syntaxe incorrecte.

6
Harfatum

Une autre cause de cette erreur: si votre API répond intentionnellement sans corps de réponse, mais répond avec un code d'état 200 OK au lieu d'un code d'état 204 No Content. Certaines bibliothèques JavaScript peuvent ne pas bien répondre à des types de contenu inattendus lorsqu'il n'y a pas de contenu, utilisez donc le code d'état correct!

5
Andrew

Mon problème était avec le cache de Google Chrome. J'ai testé cela en exécutant mon application Web sur Firefox et je n'ai pas eu cette erreur. Alors j'ai décidé d'essayer de vider le cache de Google Chrome et cela a fonctionné.

2
Amir Al

Il y aura certainement une parenthèse ouverte qui a causé l'erreur.

Je vous suggère d'ouvrir la page dans Firefox, puis d'ouvrir Firebug et de vérifier la console: le symbole manquant s'affichera. 

Exemple de capture d'écran:

Firebug highlighting the error

2
Manoj Kumar

J'ai rencontré un problème similaire en utilisant la directive ui bootstrap pour angularjs - uib-datepicker, en appuyant sur am/pm toggle.

Erreur dans le gestionnaire d'événements pour (inconnu): SyntaxError: Fin inattendue de Timepicker angulaire d'entrée JSON

En fait, c'était à cause du plugin 'Trans-over' (qui traduit un mot quand il est cliqué). Peut-être que ma réponse aidera quelqu'un, parce que je n'ai rien trouvé sur Internet.

0
OlehZiniak

Comme il s'agit d'une opération asynchrone, la onreadystatechange peut se produire avant que la valeur ait été chargée dans le responseText, essayez d'utiliser un window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);pour voir si l'erreur persiste? BOL

0
safhac

si vous avez une erreur à la balise Anchor, remplacez simplement "Onclick" par "href" ou "href" par "Onclick"

0
Harsha Annareddy

Dans les cas où votre code JavaScript est limité à une seule ligne, une autre cause de cette erreur utilise // au lieu de /**/ pour vos commentaires. 

Mauvais (tout ce qui suit après //, y compris le } de fermeture pour votre fonction)

function example() { //comment console.log('TEST'); }

Bon (limite ton commentaire)

function example() { /* comment */ console.log('TEST'); }
0
Johan Doe

Définir l'en-tête Accept sur application/json dans la demande a fonctionné pour moi lorsque j'ai rencontré le même problème.

0
Stefano Populin

J'ai eu cette erreur et je l'ai corrigé en ajoutant la garde sur readyState et status montrés ici:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};
0
Brick