2017-04-21 94 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請求去,我想隊列會更容易些,但我覺得我有錯誤的結束棒子... –