Erreur JavaScript (Uncaught SyntaxError: fin d'entrée inattendue)

211

J'ai du code JavaScript qui fonctionne dans FireFox mais pas dans Chrome ou IE.

Dans la console Chrome JS, j'obtiens l'erreur suivante:

"SyntaxError non intercepté: fin d'entrée inattendue".

Le code JavaScript que j'utilise est:

<script>
 $(function() {
 $("#mewlyDiagnosed").hover(function() {
    $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
 }, function() {
    $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
 });
</script>

Il dit que l'erreur est sur la dernière ligne qui est });

Phillip
la source
2
Je sais que le V8 de Chrome, pour un DELETEsur le serveur si la réponse était un 200 successau lieu d'un 204 success - no response , j'obtiendrais également cette erreur. Attention juste au cas où quelqu'un obtiendrait cela aussi.
Eric D. Johnson du

Réponses:

402

Ajoutez une seconde });.

Lorsqu'il est correctement en retrait, votre code lit

$(function() {
    $("#mewlyDiagnosed").hover(function() {
        $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
    }, function() {
        $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
    });
MISSING!

Vous n'avez jamais fermé l'extérieur $(function() {.

SLaks
la source
278
La leçon est, indentez toujours votre code (et indentez-le correctement).
SLaks
4
Oh mec, je souhaite que mon VIM ait détecté cette erreur de syntaxe. Je ne peux pas croire combien de temps je finis par perdre parfois avec des erreurs de syntaxe imprudentes.
HeyWatchThis
4
La leçon est, utilisez toujours un bon éditeur avec de bons plugins, qui peuvent détecter l'appariement des parenthèses, le mettre en évidence ou même réparer les problèmes.
Sławomir Lenart
1
@HeyWatchThis Vous pouvez essayer Syntastic pour Vim.
Nathan Long
1
J'utilise neomake pour vim / neovim, configuré pour exécuter jshint chaque fois que j'enregistre un fichier JavaScript. Si j'ai des erreurs de syntaxe, je verrai des symboles d'avertissement / d'erreur dans la gouttière de vim / neovim. Lorsque je place mon curseur sur cette ligne, la ligne de commande vim / neovim affiche un message indiquant l'erreur.
trusktr
89

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("");
falsarella
la source
3
Malheureusement, cela inclut $.parseJSONjquery 1.11.2
Nasser Al-Wohaibi
37

http://jsbeautifier.org/ est utile pour mettre en retrait votre code JS minifié.

De plus, avec Google Chrome, vous pouvez utiliser "jolie impression". Voir l'exemple de capture d'écran ci-dessous montrant à jquery.min.jspartir de Stack Overflow bien en retrait à partir de mon navigateur :)

entrez la description de l'image ici

Hugo
la source
14

En formatant un peu votre code, vous venez de fermer la fonction de survol interne. Vous n'avez pas fermé les parties extérieures, marquées ci-dessous:

$(// missing closing)
 function() { // missing closing }
     $("#mewlyDiagnosed").hover(
        function() {
            $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
        }, 
        function() {
            $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
        });
hvgotcodes
la source
5

Dans mon cas, cela a fini par être un simple problème de guillemet double dans mon bookmarklet , n'oubliez pas d'utiliser uniquement des guillemets simples sur les bookmarklets. Juste au cas où cela aiderait quelqu'un.

Yëco
la source
3

J'ai eu cette erreur lorsque j'essayais d'écrire un bookmarklet javascript. Je ne pouvais pas comprendre ce qui en était la cause. Mais j'ai finalement essayé d'URL encoder le bookmarklet, via le site Web suivant: http://mrcoles.com/bookmarklet/ , puis l'erreur s'est dissipée, il a donc dû y avoir un problème avec certains caractères dans le code javascript interprétés comme URL spéciale contrôler les caractères.

user280109
la source
2
J'avais un // commentaire dans mon js, qui commentait un peu plus que je ne le souhaitais depuis le coller dans l'url du bookmarklet a fait le code entier une ligne et le // était au milieu du code.
mflodin
La suppression des commentaires l'a également corrigé.
Alex
3

Cette erreur est principalement causée par des appels ajax retournés vides, lors de la tentative d'analyse d'un JSON vide.

Pour résoudre ce test si les données retournées sont vides

$.ajax({
    url: url,
    type: "get",
    dataType: "json",
    success: function (response) {

        if(response.data.length == 0){
            // EMPTY
        }else{
            var obj =jQuery.parseJSON(response.data);
            console.log(obj);
        }
    }
});
Jimmy Obonyo Abor
la source
3

Dans mon cas, il a été causé par un manque (0)dans javascript:void(0)dans un point d' ancrage.

Sam
la source
0

Je l'ai obtenu car j'avais un commentaire dans un fichier que j'ajoutais à mon JS, raison vraiment gênante de ce qui se passait - bien qu'en cliquant sur le VMfichier qui est pré-rendu et qui capture l'erreur, vous découvrirez ce que erreur était, dans mon cas, il s'agissait simplement de décommenter du code que j'utilisais.

Jack Hales
la source
0

J'ai également eu cette erreur pointant vers la fin du dernier bloc de script sur une page, seulement pour réaliser que l'erreur provenait en fait d'un clic sur un élément avec un onclick="pagename"au lieu de onclick="window.location='pagename'". Ce n'est pas toujours un support manquant!

justanotherguy
la source