Django + Jquery + Ajax + D3 不起作用
Django + Jquery + Ajax + D3 won´t work
我目前正在使用 django 框架和 Web 开发 Web UI 我正在使用 d3 + jquery。问题是我可以单独使用所有代码模块,但它们不能一起使用。
我在网页上有一个 D3 饼图,我使用 jquery 和 jquery/ajax 来提高它的可用性并更改图形中显示的当前数据。过程如下:
我点击网络上的一个按钮,它创建了一个对服务器的 ajax 调用,django 中的数据库 return 一些值并将它们转换为 json。我发回这些数据并尝试使用新的一组值更新 D3 图表。
我可以使用一些固定数据,我在 d3 中进行了硬编码,它显示饼图并随 jquery 事件变化。如果我在 view.py 中对它们进行硬编码并将它们作为 get 请愿书的响应发送,浏览器中的 js 控制台会显示它们是一个 json 对象,但 D3 不会获取它们。就像我在 jquery 代码中硬编码 json_object(都相同 copied_pasted)一样,但这次它起作用了。所以数据结构是正确的,请求和响应有效,但完整的流程不正确。
D3代码:
function setupGraph() {
nv.addGraph(function() {
var chart = nv.models.pieChart();
chart.margin({top: 30, right: 60, bottom: 20, left: 60});
var datum = data_piechart[0].values;
chart.tooltipContent(function(key, y, e, graph) {
var x = String(key);
var y = String(y);
tooltip_str = '<center><b>'+x+'</b></center>' + y;
return tooltip_str;
});
chart.showLabels(true);
chart.donut(false);
chart.showLegend(true);
chart
.x(function(d) { return d.label })
.y(function(d) { return d.value });
chart.width(450);
chart.height(450);
d3.select('#piechart svg')
.datum(datum)
.transition().duration(500)
.attr('width',450)
.attr('height', 450)
.call(chart);
});
}
Views.py:
def ajaxdata(request):
tar = request.GET['tar']
fec = request.GET['fec']
data_raw= Query (tar,fec) #This has a code of its own but
data_json= JSON.parse(data_raw)
data_json2=[{...""}]; #example of data
return HttpResponse(data_json contentype =json) #the actual syntax is the correct one, I used this one to show how i´m doing it.
Jquery代码:
$(document).ready(function(){
var valor = 1;
$("#prev").click(function(){
var date, fec;
fec = 1;
tar = 1;
//I also tried the $.get option
$.getJSON('data/', {fec: date, tar:tar}, function(data){
//Tried this also var data_json = JSON.parse(data);
data_piechart = data_json;
setupGraph(data_piechart);
});
});
$("#next").click(function(){
var date, fec;
fec = 2;
tar = 2;
$.getJSON('data/', {fec: date, tar:tar}, function(data){
data_piechart = data_json;
setupGraph(data_piechart);
});
});
});
谁能看出问题出在哪里?
感谢您的帮助。
你的 setupGraph
应该有一个 data_piechart
参数。
我目前正在使用 django 框架和 Web 开发 Web UI 我正在使用 d3 + jquery。问题是我可以单独使用所有代码模块,但它们不能一起使用。
我在网页上有一个 D3 饼图,我使用 jquery 和 jquery/ajax 来提高它的可用性并更改图形中显示的当前数据。过程如下:
我点击网络上的一个按钮,它创建了一个对服务器的 ajax 调用,django 中的数据库 return 一些值并将它们转换为 json。我发回这些数据并尝试使用新的一组值更新 D3 图表。
我可以使用一些固定数据,我在 d3 中进行了硬编码,它显示饼图并随 jquery 事件变化。如果我在 view.py 中对它们进行硬编码并将它们作为 get 请愿书的响应发送,浏览器中的 js 控制台会显示它们是一个 json 对象,但 D3 不会获取它们。就像我在 jquery 代码中硬编码 json_object(都相同 copied_pasted)一样,但这次它起作用了。所以数据结构是正确的,请求和响应有效,但完整的流程不正确。
D3代码:
function setupGraph() {
nv.addGraph(function() {
var chart = nv.models.pieChart();
chart.margin({top: 30, right: 60, bottom: 20, left: 60});
var datum = data_piechart[0].values;
chart.tooltipContent(function(key, y, e, graph) {
var x = String(key);
var y = String(y);
tooltip_str = '<center><b>'+x+'</b></center>' + y;
return tooltip_str;
});
chart.showLabels(true);
chart.donut(false);
chart.showLegend(true);
chart
.x(function(d) { return d.label })
.y(function(d) { return d.value });
chart.width(450);
chart.height(450);
d3.select('#piechart svg')
.datum(datum)
.transition().duration(500)
.attr('width',450)
.attr('height', 450)
.call(chart);
});
}
Views.py:
def ajaxdata(request):
tar = request.GET['tar']
fec = request.GET['fec']
data_raw= Query (tar,fec) #This has a code of its own but
data_json= JSON.parse(data_raw)
data_json2=[{...""}]; #example of data
return HttpResponse(data_json contentype =json) #the actual syntax is the correct one, I used this one to show how i´m doing it.
Jquery代码:
$(document).ready(function(){
var valor = 1;
$("#prev").click(function(){
var date, fec;
fec = 1;
tar = 1;
//I also tried the $.get option
$.getJSON('data/', {fec: date, tar:tar}, function(data){
//Tried this also var data_json = JSON.parse(data);
data_piechart = data_json;
setupGraph(data_piechart);
});
});
$("#next").click(function(){
var date, fec;
fec = 2;
tar = 2;
$.getJSON('data/', {fec: date, tar:tar}, function(data){
data_piechart = data_json;
setupGraph(data_piechart);
});
});
});
谁能看出问题出在哪里?
感谢您的帮助。
你的 setupGraph
应该有一个 data_piechart
参数。