Chrome: SyntaxError Uncaught: fin inattendue de l'entrée

lors du chargement de ma page dans Google Chrome, je reçois une vague erreur dans la console:

Uncaught SyntaxError: Unexpected end of input

je n'ai aucune idée de ce qui en est la cause. Comment pourrais-je aller sur le débogage de cette erreur?

143
demandé sur Qix 2010-08-29 17:26:45

13 réponses

cette erreur particulière est un fait gênant à propos de V8. Dans la plupart des cas, votre JavaScript est cassé d'une façon ou d'une autre. Par exemple manque un } ou quelque chose comme ça.

Exemple donné, cela donnera "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 Type de contenu de text/html que Chrome essaie apparemment de parser en HTML, ce qui entraîne alors la fin inattendue de l'entrée en raison du fait que les tags image inclus sont analysés.

essayez de définir le Content-Type à text/plain je pense qu'il devrait corriger les problèmes.

néanmoins, V8 pourrait faire un meilleur travail de dire exactement l'entrée s'est terminée de façon inattendue.

202
répondu Ivo Wetzel 2010-08-29 13:41:59

essayez Firebug pour Mozilla - il montrera la position du } manquant .

http://getfirebug.com /

69
répondu 2011-07-22 13:20:34

Voir mon cas sur un autre la même question :

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("");
31
répondu falsarella 2017-05-23 11:54:41

j'obtiens cette erreur quand j'ai ommitté un caractère de brace de fermeture ( } ) dans le code JavaScript. Vérifiez que vos bretelles sont bien équilibrées.

10
répondu HBP 2012-08-07 09:54:05

Pour l'enregistrement, pour toute personne essayant de trouver les différentes causes de cette erreur. Un attribut de données HTML5 vide

data-mydata = ''

cause l'erreur aussi. Vous devriez vérifier quand la valeur de données est une chaîne de caractères null et ne pas inclure l'attribut du tout. Il va sans dire que ceci est en grande partie pertinent pour le HTML généré par script.

9
répondu DroidOS 2013-06-12 09:53:03

le problème pour moi était que je faisais $.ajax avec dataType: "json" pour une requête POST qui retournait un HTTP 201 (créé) et aucun corps de requête. Le correctif était simplement de supprimer cette clé/valeur.

8
répondu Blaskovicz 2014-02-15 01:01:23

JSHint est bonne à la recherche de l'emplacement de manque de crochets ou de mauvaise syntaxe.

6
répondu Harfatum 2014-10-03 16:05:06

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 quand il n'y a pas de contenu, donc utilisez le code d'état correct!

5
répondu Andrew 2016-04-21 19:14:37

il y aura certainement un support ouvert qui a causé l'erreur.

je vous suggérerais d'ouvrir la page dans Firefox, puis d'ouvrir Firebug et de vérifier la console – il affichera le symbole manquant.

exemple de capture d'écran:

Firebug highlighting the error

2
répondu Manoj Kumar 2018-01-17 03:07:33

mon problème était avec Google Chrome cache. J'ai testé ceci en lançant mon application web sur Firefox et je n'ai pas eu cette erreur là. Alors j'ai décidé d'essayer de vider le cache de Google Chrome et ça a marché.

1
répondu Amir Al 2018-04-28 11:17:33

j'ai affronté le même problème 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 JSON entrée angulaire timepicker

S'est avéré que 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 pas trouvé n'importe quoi sur internet.

0
répondu OlehZiniak 2016-07-18 09:25:11

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

0
répondu safhac 2016-12-01 20:24:37

j'ai eu cette erreur et je l'ai corrigée en ajoutant le garde sur readyState et status montré ici:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};
0
répondu Brick 2018-07-06 05:02:23