77 votes

D3.js : "Uncaught SyntaxError : Unxpected token ILLEGAL" ?

J'ai juste téléchargé D3.js depuis d3js.org (lien vers le fichier zip), l'a décompressé et l'a référencé dans la page HTML suivante :

<html>
<head>
<title>D3 Sandbox</title>
<style>
</head>
<body>
<script src="/d3.v3.js"></script>
</body>
</html>

Mais lorsque je charge cette page, ma console (dans Chrome) me donne cette erreur :

Uncaught SyntaxError: Unexpected token ILLEGAL: line 2

Il n'aime pas le symboles pi et e au début du fichier . Errrr... que puis-je faire à ce sujet ? Je sers le fichier avec le SimpleHTTPServer de Python.

Mise à jour : oui, je sais que je peux simplement faire un lien vers une version CDN, mais je préfère servir le fichier localement.

0 votes

Le problème pour moi était que simplehttpserver ne supporte pas utf8 par défaut : stackoverflow.com/questions/15288891/

136voto

Laurent Jégou Points 733

Essayez de spécifier le jeu de caractères UTF-8 sur le document hôte HTML :

<meta http-equiv="content-type" content="text/html; charset=UTF8">

D3 contient des symboles UTF-8 (comme ) invalides dans des documents non-UTF8.

5 votes

<meta charset="UTF8"> a fait l'affaire pour moi, pour une raison quelconque, la version longue ne l'a pas fait. Merci.

5 votes

Pouvez-vous nous dire pourquoi cela est nécessaire ?

3 votes

BBischof : D3 contient des symboles UTF-8 (comme ) invalides dans des documents non-UTF8

9voto

T.J. Crowder Points 285826

Cela ressemble à un problème d'encodage. Je recommande Le minimum absolu que tout développeur de logiciels doit absolument, positivement connaître sur Unicode et les jeux de caractères (pas d'excuses !) . Malgré son titre quelque peu condescendant, il contient des informations très utiles. Plus précisément, il semble que votre serveur serve le fichier d3.v3.js avec un encodage incorrect.

7voto

Bhargav Patel Points 7

Le problème, c'est que vous servez D3 avec l'option ISO-8859-1 (souvent le codage de caractères par défaut du navigateur), alors que D3 doit être servi avec UTF-8 l'encodage. En général, cela se produit parce qu'il manque une métabalise en haut de la page HTML de chargement :

<!DOCTYPE html> <meta charset="utf-8">

Le jeu de caractères méta-spécifié est nécessaire parce que d3js.org est servi par les pages GitHub et ne spécifie pas de jeu de caractères dans le fichier de configuration de l'utilisateur. Content-Type l'en-tête de réponse. Le jeu de caractères est donc déduit du document HTML en cours de chargement.

Si vous préférez, vous pouvez spécifier un attribut charset sur la balise script. Veillez à vider le cache de votre navigateur avant de procéder au test, car la copie en cache conservera le codage des caractères lors de l'accès initial :

<script src="http://d3js.org/d3.v3.js" charset="utf-8"></script>

L'erreur ne se produit pas avec la version miniaturisée car les noms de variables sont remplacés par des équivalents ASCII. (Je ne me souviens pas de mémoire si les caractères UTF-8 dans les chaînes de format sont également remplacés par des séquences d'échappement, mais je recommande toujours de servir D3 en UTF-8 dans tous les cas).

Des problèmes d'encodage peuvent également survenir si vous avez téléchargé D3 en visualisant la source dans votre navigateur puis en utilisant le copier-coller, c'est pourquoi je recommande de télécharger d3.v3.zip.

DE : Erreur de syntaxe involontaire : Unxpected token =

6voto

hewsonism Points 32

Ajoutez 'charset="utf-8"'.

<script src="/d3.v3.js" charset="utf-8"></script>

1 votes

Même si c'est dommage, cela n'aide pas si l'utilisateur a désactivé le paramètre Affichage->Encodage de la détection automatique dans Chrome. Le passage par uglify avec l'option --ascii-only est plus fiable.

5voto

Nathan Bubna Points 3779

J'ai essayé de définir le jeu de caractères dans la documentation et dans la balise script elle-même, mais Chrome ne semble pas s'en soucier. Je ne sais pas si je fais quelque chose de mal.

J'ai réussi à le faire passer par uglify avec l'option --ascii-only d'abord.

MISE À JOUR : il s'avère que mon paramètre View->Encoding dans Chrome n'était pas sur Auto-Detect, mais sur un encodage occidental. Je ne sais pas trop pourquoi, mais le fait de changer cela a résolu le problème. Il est ridicule de penser que ce paramètre puisse l'emporter sur une propriété charset directement sur la balise script. Considérant que les utilisateurs pourraient être dans la même situation et ne pas être en mesure de le comprendre, je vais encore utiliser uglify pour assurer le succès.

0 votes

A eu le même problème. En changeant le paramètre d'encodage en auto-détection, le problème est résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X