Lors du chargement de ma page dans Google Chrome, j'obtiens une vague erreur dans la console:
Uncaught SyntaxError: fin inattendue de l'entrée
Je n'ai aucune idée de ce qui en est la cause. Comment procéder pour déboguer cette erreur?
Lors du chargement de ma page dans Google Chrome, j'obtiens une vague erreur dans la console:
Uncaught SyntaxError: fin inattendue de l'entrée
Je n'ai aucune idée de ce qui en est la cause. Comment procéder pour déboguer cette erreur?
<script>https://example.com/a.js</script>
et il aurait dû être<script src="https://example.com/a.js"></script>
Réponses:
Cette erreur particulière est un fait ennuyeux sur 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 produira également "Fin de saisie inattendue":
eval('[{"test": 4}') // notice the missing ]
Mais la cause profonde des problèmes semble être que l'URL JSON demandé a un type de contenu de text/html
laquelle Chrome tente apparemment d'analyser comme HTML, qui ensuite les résultats à la fin inattendue de l' entrée en raison du fait que les balises d'image inclus sont en cours analysé.
Essayez de définir Content-Type sur text/plain
Je pense que cela devrait résoudre les problèmes.
Néanmoins, V8 pourrait faire un meilleur travail en indiquant exactement où l'entrée s'est terminée de manière inattendue.
Essayez Firebug pour Mozilla - il affichera la position des disparus }
.
ctrl+shift+i
vous le dira.
Voir mon cas sur une 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("");
Pour mémoire, pour quiconque essaie de trouver les différentes causes de cette erreur. Un attribut de données HTML5 vide
data-mydata = ''
provoque également l'erreur. Vous devez vérifier si la valeur des données est une chaîne nulle et ne pas inclure du tout l'attribut. Il va sans dire que cela est largement pertinent pour le HTML généré par script.
data-setup='{"example_option":true}'
tout fonctionnait très bien.
Le problème pour moi était que je faisais $ .ajax avec dataType: "json"
pour une requête POST qui renvoyait un HTTP 201 (créé) et aucun corps de requête. Le correctif consistait simplement à supprimer cette clé / valeur.
Une autre cause de cette erreur: si votre API répond intentionnellement sans corps de réponse, mais répond avec un 200 OK
code d'état au lieu d'un 204 No Content
code d'état. Certaines bibliothèques JavaScript peuvent ne pas bien répondre aux types de contenu inattendus en l'absence de contenu, utilisez donc le code d'état correct!
Dans les cas où votre code JavaScript est réduit à une seule ligne, une autre cause de cette erreur est d'utiliser //
au lieu de /**/
pour vos commentaires.
Mauvais (commente tout après avoir //
inclus la clôture }
de votre fonction)
function example() { //comment console.log('TEST'); }
Bien (limite votre commentaire)
function example() { /* comment */ console.log('TEST'); }
Dans mon cas, j'ajoutais du javascript de manière dynamique et en utilisant des guillemets doubles 2 fois dans des modèles de chaîne, j'ai donc changé la seconde en guillemets simples et l'erreur a disparu. J'espère que cela aidera certaines des personnes qui viennent ici pour la même raison.
J'ai rencontré un problème similaire en utilisant la directive bootstrap de l'interface utilisateur pour angularjs - uib-datepicker, en appuyant sur le bouton am / pm.
Erreur dans le gestionnaire d'événements pour (inconnu): SyntaxError: Fin inattendue du timepicker angulaire d'entrée JSON
Il s'est avéré que c'était à cause du plugin 'Trans-over' (qui traduit un mot quand on clique dessus). Peut-être que ma réponse aidera quelqu'un, car je n'ai rien trouvé sur Internet.
si vous avez une erreur au tag Anchor, remplacez simplement «Onclick» par «href» ou «href» par «Onclick»
Définir l'en- Accept
tête application/json
dans la demande a fonctionné pour moi lorsque j'ai rencontré le même problème.
Essayer d'analyser un JSON vide peut être la cause de cette erreur.
Lorsque vous recevez une réponse du serveur ou autre, vérifiez d'abord si elle n'est pas vide. Par exemple:
function parseJSON(response) {
if (response.status === 204 || response.status === 205) {
return null;
}
return response.json();
}
Ensuite, vous pouvez récupérer avec:
fetch(url, options).then(parseJSON);
Dans mon cas, j'avais une faible vitesse Internet, lorsque je désactive la connexion Internet de l'autre utilisateur, l'erreur a disparu, étrange
Content-length
tête spécifie plus d'octets que la réponse contient, ou peut-être que le serveur envoie en quelque sorte du HTML invalide.