javascript - Django D3从mongodb读取csv数据来绘制图表

标签 javascript python mongodb csv d3.js

我正在尝试从mongodb读取csv数据来绘制图表,基本上获取csv文件的代码在view.py中(它正在工作),但目前我想获取csv数据来绘制图表。我尝试过获取数据的方法(其中之一是ajax)从链接中获取数据但失败了。下面是输出的代码和屏幕截图。

html代码

//.... 
  var dataset 
  d3.csv("{% url 'system:data' %}", type, function(error, data){
  if (error) throw error;
  dataset = data
  initialDomain = d3.extent(data, function(d) { return d.Timestamp; });
  x.domain(initialDomain);
  ydomain = d3.extent(data, function(d) { return d['AGV Mileage']; });
  y.domain(ydomain);
  x2.domain(x.domain());
  y2.domain(y.domain());
//....

js

 /*var csvData;
        $(document).ready(function() {
                csvData = $.ajax({
                    type: "GET",
                    url: "http://..../system/diagnostics/data",
                    dataType: "text/csv",
                    success: function (result) {
                       alert(result);
                       alert(result.getAllResponseHeaders())
                     }
                });
        })*/ 

view.py

//...
class DataView(DiagnosticMixin, TemplateView):

    def render_to_response(self, request):
        results = []
        end = timezone.now()
        start = end - timezone.timedelta(seconds=86400)

        cursor = get_database().Diagnostic.find({
            'timestamp': {
                '$gte': start,
                '$lt': end
            },
        }).sort('timestamp')

        first = True
        for doc in cursor:
            if first:
                keys = ['Timestamp']
                for st in doc['status']:
                    for kv in st['values']:
                        keys.append(kv['key'])
                if len(keys) < 240:
                    continue
                results.append('"%s"\n' % '","'.join(keys))
                first = False

            values = [timezone.make_naive(doc['timestamp'])]
            for st in doc['status']:
                for kv in st['values']:
                    values.append(kv['value'])
            results.append('"%s"\n' % '","'.join(['%s' % v for v in values]))

        return StreamingHttpResponse(results, content_type='text/csv')

url.py

//...
    url(r'^diagnostics/data$', DataView.as_view(), name='data'),

html 页面附在此处 html

将数据字(.../system/diagnostic/data)添加到链接后的 html 页面附在此处 enter image description here

基本上 csv 就在那里,我尝试过从中获取数据的方法,但未能获取它,我现在完全迷失了。

请您赐教一下,先谢谢了。

编辑 csv数据加载成功,但是当变量csvData放入d3.csv()中时,又出现了一个问题,出现错误并且图表不会出现error

the code :

 var global_csvData;
            $(document).ready(function() {
                   var csvData = $.ajax({
                        type: "GET",
                        url: "http://../system/diagnostics/data",
                        success: function (result) {
                          console.log(result);
                          console.log(csvData.getAllResponseHeaders());
                          global_csvData = csvData;
                         }
                    });
            })

       var csvData = global_csvData;
      d3.csv(csvData, type, function(error, data) {\\....}

对于长度错误,我尝试声明变量 global_csv 变量,但结果仍然相同。

最佳答案

修改你的js如下

 var csvData;
        $(document).ready(function() {
                csvData = $.ajax({
                    type: "GET",
                    url: "http://..../system/diagnostics/data",
                    success: function (result) {
                      console.log(result);
                      console.log(csvData.getAllResponseHeaders());
                     }
                });
        })

从你的ajax中删除dataType属性,然后它就可以工作了。 或将 dateType='text/csv' 更改为 dataType:'text' 因为 ajax 函数无法理解 dateType='text/csv' 因此而不是 success 函数调用 error 函数

示例-Spreadsheet-10-rows.csv

1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8
2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58
3,"Cardinal Slant-D� Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization,
9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization,
10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38

测试.html

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        var x = $.ajax({
                     url:"Sample-Spreadsheet-10-rows.csv",type:"GET",
                     dataType:"text",
                     success:function(result){
                          console.log("success");
                          console.log(x.responseText);
                       },
        error:function(result){
                          console.log(x.responseText)
                      }
       });
    });
});
</script>
</head>
<body>

<button>Get RESPONSE TEXT</button>

</body>
</html>

关于javascript - Django D3从mongodb读取csv数据来绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252408/

相关文章:

Python tkinter slider 控件

javascript - 多个帐户的嵌套关联

node.js - nodejs在mongodb中获取查找结果

javascript - 从最后一个逗号开始从字符串中删除所有字符

javascript - JQuery:动态更新 HTML,以便 JQuery 识别它

python - python 中 range() 的替代函数

javascript - Mongoose 模型如何在不导出的情况下工作

javascript - IE 10+ 无法解析用自己的 Date.prototype.toLocaleString 生成的日期字符串

javascript - 捕获 `touchmove`事件时访问触摸历史记录

python - 来自数组的直方图 matplotlib