D3.js: “Uncaught SyntaxError: Несподіваний маркер НЕЗАКОННИЙ”?


77

Я щойно завантажив D3.js з d3js.org (посилання на zip-файл), розпакував його та посилався на нього на такій HTML-сторінці:

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

Але коли я завантажую цю сторінку, моя консоль (у Chrome) видає мені таку помилку:

Uncaught SyntaxError: Unexpected token ILLEGAL: line 2

Він не любить символи pi та e на початку файлу . Errrr ... що я можу з цим зробити? Я обслуговую файл за допомогою python SimpleHTTPServer.

Оновлення: так, я знаю, що я можу просто зробити посилання на версію CDN, але я волів би обслуговувати файл локально.


проблема для мене було те , що SimpleHTTPServer не підтримує utf8 за замовчуванням: stackoverflow.com/questions/15288891 / ...
lewurm

Відповіді:


136

Спробуйте вказати набір символів UTF-8 у документі хосту HTML:

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

D3 містить символи UTF-8 (наприклад, π), які є інвалідами в документах, що не належать до UTF8.


5
<meta charset = "UTF8"> зробив для мене фокус, чомусь довша версія цього не зробила. подяка
Ніцан Балелі

5
Чи можете ви прокоментувати, чому це потрібно?
BBischof

3
BBischof: D3 містить символи UTF-8 (наприклад, π) інвалідів у документах, що не належать до UTF8
Лоран Жегу,

1
Це не допомагає, якщо у користувача вимкнено параметр Перегляд-> Кодування для функції Автовизначення в Chrome. Запуск через uglify за допомогою параметра --ascii-only є більш надійним.
Nathan Bubna

1
Вам потрібно використовувати UTF8, тому що D3 має такий символ, як π (Pi): github.com/mbostock/d3/issues/1195
Ніколаї Ван Леннепкаде

9

Це звучить як проблема з кодуванням. Я рекомендую Абсолютний мінімум кожному розробнику програмного забезпечення абсолютно, позитивно повинен знати про Unicode та набори символів (без виправдання!) . Незважаючи на дещо поблажливий заголовок, він містить дуже корисну інформацію. Зокрема, схоже, ваш сервер обслуговує d3.v3.jsфайл із неправильним кодуванням.


6

Додати 'charset = "utf-8"'

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

1
Хоча це і кульгаво, це не допомагає, якщо у користувача вимкнено параметр Перегляд-> Кодування для автоматичного виявлення в Chrome. Запуск через uglify за допомогою параметра --ascii-only є більш надійним.
Nathan Bubna

5

Я спробував встановити набір символів у документі та в самому тегу сценарію, але Chrome, схоже, не хвилює. Не впевнений, чи роблю я щось не так.

Я знайшов успіх, провівши його за допомогою uglify із спочатку опцією --ascii-only.

ОНОВЛЕННЯ: Виявляється, моє налаштування View-> Encoding у Chrome не було в Auto-Detect, а якесь західне кодування. Не знаю, чому, але зміна вирішила проблему. Смішно, що це налаштування перевершить властивість кодування безпосередньо на тегу сценарію. Враховуючи, що користувачі можуть опинитися в тій самій ситуації і не зможуть це зрозуміти, я все одно буду використовувати uglify для забезпечення успіху.


мала таку ж проблему. Зміна налаштування кодування для автоматичного виявлення
вирішила

0

Перевірте, чи є знак плюса між усіма вашими конкатенаціями рядків, якщо цього не сталося, ця помилка генерується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.