2017-04-21 96 views
0

TL; DR:任何使用AJAX,d3和PHP从数据库获取数据并从中生成图形的好例子都将不胜感激。使用d3.queue等待AJAX​​响应

因此,我使用d3基于使用AJAX和PHP从数据库中提取的数据创建强制图表,我认为有几种方法可以将数据绑定到DOM元素或使用D3。队列似乎是最合乎逻辑的方法,但我一直在努力寻找将所有这些位一起使用的简单示例。

所以我的工作AJAX请求是这样的:

$(document).ready(function() { 
     $('select[name="locations"]').change(function(){ 
      var location = $(this).val(); 
      $.ajax({ 
        type: 'POST', 
        url: 'dataselect.php', 
        data: { l_id: location }, 
        success: function (response) { 
       console.log(response); 
      },  
      }); 
     }); 
    }); 

我试图传递JSON DOM元素,但没有运气提取它,有些人似乎不喜欢这种方式。

,工程的D3是这样的:

d3.json("test.php", function(error, graph) { 
    if (error) throw error;... Lots more d3 that I don't think is relevant. 

test.php的和dataselect.php是除了dataselect相同先后为AJAX请求的变量和D3不喜欢它,因为它是。

所以,我的问题是什么是最平稳的方式让d3在运行前“等待”来自AJAX请求的数据?

我猜我需要在函数中包装一些东西,并将其排列成某种顺序,但我真的很难将它绑定在一起。

最后,对不起,我觉得这应该是相当微不足道的,但我已经阅读了很多问题,迄今尚未设法实现任何解决方案。

编辑:因此,按照d3.request路线,我已经想通了如何发送数据,而AJAX:

d3.selectAll("#onploc") 
.on('change', function() { 
    var location = eval(d3.select(this).property('value')); 
console.log(location);//gets value property of selected menu item. 


d3.json("dataselect.php?l_id="+location,function(error, data) { 
console.log(data);//sends location variable to php to get data back. 
}) 
}); 

回答

1

这可能会有两种方式 - 你可以从任何调用D3绘图代码你成功回调,例如

... 
success: function(response) { 
    var data = JSON.parse(response) // maybe, if you need to convert to JSON 
    d3RenderFunction(data); 
} 

,或者你可以使用d3.request传递的参数:

d3.request('dataselect.php') 
    .mimeType("application/json") 
    .response(function(xhr) { return JSON.parse(xhr.responseText); }) 
    .post({ l_id: location }, function(error, graph) { ... }) 
+0

谢谢,我会和D3请求去,我想队列会更容易些,但我觉得我有错误的结束棒子... –