Несколько круговых диаграмм не загружаются

Это проблема загрузки или конфигурации времени выполнения

. Важно признать, что во время этапа компиляции или синтаксического анализа происходит синтаксическая ошибка или синтаксическая ошибка, что означает, что PHP закладывает деньги до того, шанс выполнить любой из ваших кодов. Поэтому, если вы изменяете конфигурацию PHP display_errors во время выполнения (это включает в себя что угодно: от использования ini_set в вашем коде до использования .htaccess, который является файлом конфигурации во время выполнения), тогда загружаются только загруженные настройки конфигурации по умолчанию.

Как всегда избегать WSOD в разработке

Чтобы избежать WSOD, вы хотите убедиться, что загруженный файл конфигурации имеет display_errors и error_reporting установлен на -1 ( это эквивалент E_ALL, потому что он обеспечивает включение всех битов независимо от того, какая версия PHP вы используете ). Не печатайте постоянное значение E_ALL, потому что это значение может быть изменено между разными версиями PHP.

Загруженная конфигурация - это либо ваш загруженный файл php.ini, либо ваш apache.conf или httpd.conf или файл virtualhost. Эти файлы читаются только один раз на этапе запуска (когда вы сначала запускаете apache httpd или php-fpm, например) и только переопределены изменениями конфигурации времени выполнения. Убедившись, что display_errors = 1 и error_reporting = -1 в загруженном файле конфигурации гарантируют, что вы никогда не увидите WSOD независимо от синтаксиса или ошибки синтаксического анализа, которые происходят до изменения времени выполнения, например ini_set('display_errors', 1); или error_reporting(E_ALL); может иметь место.

Как найти загруженные файлы конфигурации (php.ini)

Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только с помощью следующего кода ...

Затем укажите ваш браузер и посмотрите на загруженный файл конфигурации и дополнительные файлы .ini, которые обычно находятся в верхней части вашего phpinfo() и будут содержать абсолютный путь ко всем ваши загруженные файлы конфигурации.

Если вы видите (none) вместо файла, это означает, что у вас нет файла php.ini в файле Configuration (php.ini). Таким образом, вы можете загрузить фон php.ini в комплекте с PHP отсюда и скопировать его в свой путь к файлу конфигурации как php.ini, затем убедитесь, что ваш пользователь php имеет достаточные разрешения для чтения из этого файла. Вам нужно будет перезагрузить httpd или php-fpm, чтобы загрузить его. Помните, что это файл development php.ini, который поставляется в комплекте с источником PHP. Так что, пожалуйста, не используйте его в производстве!


Просто не делайте этого в производстве

Это действительно лучший способ избежать WSOD в разработке. Любой, кто предположил, что вы положили ini_set('display_errors', 1); или error_reporting(E_ALL); наверху вашего PHP-скрипта или используете .htaccess, как вы это делали, не поможет вам избежать WSOD при возникновении синтаксиса или синтаксического анализа (как в вашем случае здесь ), если ваш загруженный файл конфигурации отключен display_errors.

Многие люди (и фондовые установки PHP) будут использовать файл production-ini, который по умолчанию отключен display_errors, что обычно приводит к это то самое разочарование, которое вы испытали здесь. Поскольку PHP уже отключился, когда он запускается, он сталкивается с синтаксической или синтаксической ошибкой и не дает ничего для вывода. Вы ожидаете, что ваш ini_set('display_errors',1); в верхней части вашего PHP-скрипта должен был избежать этого, но не имеет значения, не может ли PHP не разобрать ваш код, потому что он никогда не достигнет времени исполнения.

0
задан Coola 11 March 2019 в 19:48
поделиться

2 ответа

Я не думаю, что решение, предложенное Донатом, сработает, поскольку проблема заключается не только в выборе. Я упростил код, чтобы поместить data, data1, data2 в массив под названием alldata. Это позволило мне создать цикл forEach для каждого из циклов alldata и создать единую функцию рисования диаграмм, которая может рисовать круговую диаграмму для данных. После долгих поисков неисправностей я обнаружил, что проблема в коде - добавление легенд данных, которые и вызывали проблему. Кажется, circle.remove(); вызывал проблему. Я отредактировал код в скрипте ниже, который исправляет проблему, удаляя кружок, используя лучший выбор.

Вот полная рабочая скрипка с улучшенным кодом, облегчающим чтение: https://jsfiddle.net/coolakul/z1b2p7x3/

Надеюсь, это поможет. Дайте мне знать, если вам нужно что-то разъяснить.

0
ответ дан Coola 11 March 2019 в 19:48
поделиться

Вы должны сосредоточить свой выбор на каждом SVG. Итак, сначала выберите текущий SVG:

const svg = d3.select("#chartnewagain svg")

, затем

svg.selectAll(".nv-label text")
svg.selectAll('.nv-series')

Потому что, когда вы используете d3.selectAll (". Что-то"), вы выбираете все с помощью класса .something ( также выше SVG), и вы не хотите этого.

Надеюсь, это поможет:)

РЕДАКТИРОВАТЬ: Проблема в

 d3.selectAll('.nv-series').each(function(d, i) {
  var group = d3.select(this),
    circle = group.select('circle');
  console.log(circle)  
  var color = circle.style('fill');  // error
...

, потому что, когда вы делаете это в первый раз, тогда '.nv-series' выбирается из первого svg, и все в порядке. Второй раз '.nv-series' выбирается из первого и второго svg, и, поскольку вы уже удалили этот круг в первом, он выдает ошибку, когда вам нужно получить стиль из элемента, который он не может найти с помощью circle = group.select('circle')

[1113 ] Итак, решение:

const svg = d3.select("#div_id svg")
...
svg.selectAll(".nv-label text")
...
svg.selectAll('.nv-series')
...

для каждого экземпляра

0
ответ дан donatso 11 March 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: