2012-02-21 33 views
7

Tôi có một ứng dụng dancer nhỏ phục vụ một số HTML (bao gồm javascript để gọi API google charts) và các URL khác truy vấn cơ sở dữ liệu và trả về dữ liệu trong JSON được mã hóa bạn có thể chuyển đến google.visualization.DataTable. Javascript truy vấn ứng dụng vũ cho các dữ liệu JSON sau đó chuyển nó vào các bảng xếp hạng API google - Một phiên bản đơn giản là:gửi JSON ngày tới google charts API từ Perl

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript"> 

     google.load('visualization', '1.0', {'packages':['corechart']}); 
     google.setOnLoadCallback(initialize); 

function initialize() { 
    var res = $.ajax({ 
     url: "/data/2", 
     dataType:"json", 
     async: false, 
     data: "{}", 
     contentType: "application/json", 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert('textStatus ' + textStatus); 
      alert('errorThrown ' + errorThrown); 
     } 
    }); 
    jsonData = res.responseText; 
    var data = new google.visualization.DataTable(jsonData); 

    var chart = new google.visualization.BarChart(document.getElementById('chart_div')); 
    chart.draw(data, {width: 400, height: 240}); 

} 
    </script> 

Vấn đề là một số dữ liệu được trả về bởi các Perl bao gồm ngày/timestamps và vì vậy nên đã loại thiết lập để "datetime":

{"rows":[{"c":[{"v":"WHAT_CAN_I_PUT_HERE"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]} 

Trong javascript bạn có thể tạo ra một ngày để vượt qua các bảng xếp hạng API google với:

new Date(2012, 1, 08, 09, 32, 0) 

Làm thế nào tôi có thể gửi một encod ngày ed trong JSON từ Perl sao cho API biểu đồ google hiểu nó? Nếu bạn không thể có những lựa chọn nào khác có thể có sẵn cho tôi?

Trả lời

17

JSON không hỗ trợ datetime làm loại dữ liệu. Nhưng theo tài liệu của Google, bạn chỉ có thể gửi một chuỗi có định dạng này:

JSON không hỗ trợ JavaScript Giá trị ngày (ví dụ: "new Date (2008,1,28,0,31,26)" Tuy nhiên, API hiện hỗ trợ một biểu diễn JSON hợp lệ tùy chỉnh của các ngày dưới dạng chuỗi theo định dạng sau: Ngày (năm, tháng, ngày [, giờ, phút, giây [, mili giây]]) nơi mọi thứ sau ngày là không bắt buộc, và tháng là zero-based

Google Chart Tools Datasource Protocol

+0

nhờ tôi sẽ cố gắng mà . – bohica

+0

Tôi vừa làm hôm qua, và tôi đã làm việc đó;) – benjaoming

+0

Cảm ơn, điều đó đã làm việc mặc dù tôi không thể hiển thị nó trong mili giây. – bohica

8

chỉ cần làm rõ:. bạn nên viết giá trị ô như một chuỗi trông giống như sau: Date (year, month). ví dụ của bạn:

{"rows":[{"c":[{"v":"Date(year, month)"},{"v":"2095"}]}],"cols":[{"type":"datetime","label":"DTU"},{"type":"number","label":"COUNT"}]} 

hy vọng rằng sẽ giúp, và chính xác cho bạn như tôi đang sử dụng nó trong php và không perl

3

tôi đã chạy vào cùng một vấn đề và giải pháp trên không hiệu quả. Sau khi tìm kiếm giờ tôi tìm thấy bài viết sau và giải pháp trong đó đã làm việc.

https://groups.google.com/forum/#!msg/google-visualization-api/SCDuNjuo7xo/ofAOTVbZg7YJ

Không bao gồm "mới" trong chuỗi json vì vậy nó sẽ được chỉ: "Ngày (2012, 1, 08, 09, 32, 0)"

+0

Bạn không thể nói "giải pháp trên không hoạt động". Nếu bạn đọc kỹ các giải pháp, bạn sẽ thấy chúng gợi ý xuất "Ngày (năm, tháng, ngày)" mà không có "mới". Vì vậy, những gì là sai với những câu trả lời? –

+0

Trớ trêu thay bất chấp nhận xét của @ JoséRamón, tôi đã bỏ lỡ một phần về việc bỏ qua từ khóa 'mới', và đây là câu trả lời phù hợp với tôi! +1! –

Các vấn đề liên quan