c3.generate не выкидывает ошибку

Я использую c3 + d3 + javascript для создания линейного графика на веб-странице. Мне удалось создать код, который работал нормально локально, но когда я загрузил его на свой сервер, код перестал работать. Я объясняю проблему ниже:

Проблема: c3.generate не выдает ошибки при загрузке на сервер

JSFiddle: http://jsfiddle.net/xq6wmyvp/10/

var chart;
function initialize(path) {
    try {
        c3.generate({
            bindto: '#chart',
            data: {
                x: 'label',
                url: path,
                type: 'line',
            },
            axis: {
                x: {
                    type: 'categories',
                    label: {
                        text: 'days',
                    },
                },
                y: {
                    label: {
                        text: 'yield',
                    },
                    tick: {
                        format: d3.format(".2%")
                    }
                }
            },
        });
    } catch (err) {
        return false;
    }
    return true;
}
var path1 = 'https://gist.githubusercontent.com/SamMorrowDrums/f571240047c0344a4af8/raw/433eae455570b64edcdc7ece39416b468b612f49/test.csv';
alert(initialize('blabla'));

Объяснение кода : код (в скрипке) имеет функцию, которая инициализирует диаграмму линейным графиком, используя некоторые данные. Путь к данным задается как переменная для этой функции (которая называется 'initialize(path)'). Эта функция использует c3.generate для создания графика. Если данные недоступны или не существуют, c3.generate выдает ошибку (это работает локально, но не при загрузке на сервер - это проблема), и функция (initialize) возвращает false. Если данные существуют, график загружается и "initialize" возвращает true.

Пересмотренная проблема: после загрузки кода на сервер, функция 'initialize (path)' возвращает только 'true', даже если данные недоступны / не существуют.

Я не знаю, как это решить. Вы можете мне помочь? Спасибо за прочтение!

(Github ссылка на проблему: https://github.com/masayuki0812/c3/issues/960)

1 ответ

Решение

Как я отмечал в своем комментарии, под капотом c3 используется d3.xhr для извлечения данных. Это асинхронный вызов, означающий, что он находится за пределами вашего блока try.

Возможные обходные пути включают в себя:

1.) исправить это в исходном коде c3 В строке 1903 вы видите, что ошибка сбрасывается.

2.) создать глобальный обработчик ошибок

3.) не используйте параметр URL в c3. Выполните свой собственный запрос d3 xhr (правильно обработайте ошибку), и в случае успеха вызовите c3.generate с columns вариант. Это способ, которым я бы сделал это.

d3.csv("path/to/file.csv", function(error, json) {
  if (error){
      // handle error properly
      return;
  }
  c3.generate({
    ...
  });
});
Другие вопросы по тегам