dhtmlx gantt динамически загружает данные с помощью jquery

Попытка заставить dhtmlx gantt загружать данные json при загрузке страницы.

data_file.php (фрагмент)

$colors = array(1=>"red", 2=>"green", 3=>"blue", 4=>"yellow", 5=>"orange", 6=>"grey");
$aryData = array();
if($project_tasks) {
    foreach($project_tasks as $aryTask) {
        $aryData[] =  array(
          "id" => $aryTask["pt_id"],
          "text" => $aryTask["pt_name"],
          "start_date" => date("d-m-Y", strtotime($aryTask["pt_start_date"])),
          "duration" => round((strtotime($aryTask["pt_end_date"]) - strtotime($aryTask["pt_start_date"]))/(60*60)),
          "open" => true,
          "color" => $colors[rand(1,6)]
        );
    }
}

$strData = json_encode($aryData, JSON_UNESCAPED_SLASHES);
header("Content-type:application/json;");
echo "\"data\" : ".$strData;

доставляет что-то вроде этого (из консоли chrome):

"data" : [{"id":"152","text":"test3","start_date":"01-09-2015","duration":600,"open":true,"color":"yellow"},{"id":"153","text":"test1","start_date":"23-09-2015","duration":72,"open":true,"color":"grey"},{"id":"154","text":"test2","start_date":"15-09-2015","duration":264,"open":true,"color":"red"}]

js-file.js (фрагмент)

var data_url = basePath + "system/data_file.php?project_id=" + projectID;
$(".gantt").dhx_gantt({
scale_unit:"week",
step:1,
date_scale:"%W"
});
// var tasks = $(".gantt").dhx_gantt().load(data_url);
$(".gantt").dhx_gantt().load(data_url);
gantt.parse(tasks);

Я пытаюсь «предупредить (задачи);» с результатом "undefined" или null.

Я пробовал синхронную загрузку данных ajax:

var tasks = null;

$.ajax({
    url: data_url,
    async: false,
    dataType: 'json',
    success: function(data) {
        tasks = data;
    }
});

и это дало тот же результат -> ноль.

Итак, я понимаю, почему Гант не загружается данными - в переменной tasks нет данных.

У кого-нибудь есть работающий пример?

С уважением

Ларс


person osomanden    schedule 07.10.2015    source источник


Ответы (1)


Итак... Я поигрался с кодом..

И это то, что я придумал до сих пор. Кажется, это был JSON, который должен был быть особым образом.

JS:

/* Gantt Start */

        var data_url = basePath + "system/print_gantt_project_data.php?project_id=" + projectID;

        gantt.config.readonly = true;
        gantt.config.scale_unit = "month"; 
        gantt.config.step = 1;
        gantt.config.date_scale = "%M";

        gantt.init("gantt_div");
        gantt.load(data_url, "json");
        gantt.render();
/* Gantt End */

Единственная проблема с этим подходом - опять же пока - заключается в том, что dhtmlx_gantt сначала не отображает задачи. Кажется, требуется своего рода обновление. (И я попробовал то, что доступно в API (http://docs.dhtmlx.com/gantt/api__gantt_render.html)

Все еще пытаюсь исправить это..

О, и файл PHP, создающий данные json:

/Начать/

/* Create JSON array and print it for /js/system_project.js */
$colors = array(1=>"red", 2=>"green", 3=>"blue", 4=>"yellow", 5=>"orange", 6=>"grey");
$aryData = array();
if($project_tasks) {
    foreach($project_tasks as $aryTask) {
        $aryData[] =  array(
          "id" => $aryTask["pt_id"],
          "text" => $aryTask["pt_name"],
          "start_date" => date("d-m-Y", strtotime($aryTask["pt_start_date"])),
          "duration" => round((strtotime($aryTask["pt_end_date"]) - strtotime($aryTask["pt_start_date"]))/(60*60)),
          "open" => "true",
          "color" => $colors[rand(1,6)],
          "parent" => $aryTask["pt_parent"]
        );
    }
}

$strData = json_encode($aryData, JSON_UNESCAPED_SLASHES);
header("Content-type:application/json;");
echo "{\"data\":".$strData."}";

Любые знания о том, как заставить вещи работать правильно, пожалуйста, не стесняйтесь вводить ;-)

/Ларс

person osomanden    schedule 11.10.2015