【问题标题】:Passing dates from webmethod to Google annotation chart将日期从 webmethod 传递到 Google 注释图表
【发布时间】:2015-12-30 04:40:42
【问题描述】:

我正在尝试使用 Visual Studio 显示谷歌注释图表,通过 ajax 和 JSON 数据调用网络方法。我尝试了许多不同的格式,但date 列似乎不喜欢我传递的日期格式。

当我运行这个时,从我的测试数据创建的 json.parse 结果是:

[
    ["Thu Dec 24 2015 18:00:00 GMT-0600 (Central Standard Time)",1094,"0","test"], 
    ["Wed Dec 16 2015 18:00:00 GMT-0600 (Central Standard Time)",4000,"2","test"], 
    ["Mon Dec 14 2015 18:00:00 GMT-0600 (Central Standard Time)",7888,"4","test"], 
    ["Sun Dec 13 2015 18:00:00 GMT-0600 (Central Standard Time)",10804,"0",""], 
    ["Wed Dec 09 2015 18:00:00 GMT-0600 (Central Standard Time)",3878,"0",""],
    ["Tue Dec 08 2015 18:00:00 GMT-0600 (Central Standard Time)",1312,"0",""], 
    ["Mon Dec 07 2015 18:00:00 GMT-0600 (Central Standard Time)",2565,"1","test"]
]

最后我收到错误:

JavaScript 运行时错误:类型不匹配。价值 2015 年 12 月 24 日星期四 18:00:00 GMT-0600(中部标准时间)与输入日期不匹配 列索引 0。

我一直在寻找解决方案 2 天没有运气。

<script type="text/javascript">
function drawAnnoChart() {
    var dUser = document.getElementById('MainContent_lblUsername').innerHTML;
    var dUnit = document.getElementById('MainContent_hfUnitChoice').value;
    var data = new google.visualization.DataTable();
    dateFormatter = new google.visualization.DateFormat({ formatType: 'short' });

    data.addColumn('date', 'Date');
    data.addColumn('number', 'Distance');
    data.addColumn('string', 'Felt');
    data.addColumn('string', 'Notes');

    $.ajax({
        type: "POST",
        url: "me.aspx/GetSwimData",
        data: JSON.stringify({ 'dUser': dUser, 'dUnit': dUnit }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (r) {
            var dstring = '';
            for (var i = 0; i < r.d.length; i++) {
                r.d[i][0] = '"' + new Date(r.d[i][0]) + '"';
                r.d[i][2] = '"' + r.d[i][2] + '"';
                r.d[i][3] = '"' + r.d[i][3] + '"';
                if (i == 0) { dstring = '[' + r.d[i] + ']'; }
                else { dstring = dstring + ',' + '[' + r.d[i] + ']'; }
            }
            dstring = '[' + dstring + ']';
            data.addRows(JSON.parse(dstring));
        },
        failure: function (r) {
            alert(r);
        },
        error: function (r) {
            alert(r);
        }
    });

    var chart = new  google.visualization.AnnotationChart(document.getElementById('chart_div'));
    var options = {
        displayAnnotations: true
    };
    chart.draw(data, options);
}

</script>

【问题讨论】:

  • 格式化和重新排序散文

标签: javascript visual-studio google-visualization


【解决方案1】:

尝试返回类似的内容:

[
    ["Date(2015,12,24,18,0,0)",1094,"0","test"], 
    ["Date(2015,12,16,18,0,0)",4000,"2","test"], 
    ["Date(2015,12,14,18,0,0)",7888,"4","test"], 
    ["Date(2015,12,13,18,0,0)",10804,"0",""], 
    ["Date(2015,12,9,18,0,0)",3878,"0",""],
    ["Date(2015,12,8,18,0,0)",1312,"0",""], 
    ["Date(2015,12,7,18,0,0)",2565,"1","test"]
]

【讨论】:

    【解决方案2】:

    只需要正确格式化日期,这样的事情应该可以工作......

    google.charts.load('current', {'packages':['annotationchart']});
    google.charts.setOnLoadCallback(drawAnnoChart);
    
    
    function drawAnnoChart() {
        var data = new google.visualization.DataTable();
    
        data.addColumn('date', 'Date');
        data.addColumn('number', 'Distance');
        data.addColumn('string', 'Felt');
        data.addColumn('string', 'Notes');
    
        var dataArr = [
            ["Thu Dec 24 2015 18:00:00 GMT-0600 (Central Standard Time)",1094,"0","test"], 
            ["Wed Dec 16 2015 18:00:00 GMT-0600 (Central Standard Time)",4000,"2","test"], 
            ["Mon Dec 14 2015 18:00:00 GMT-0600 (Central Standard Time)",7888,"4","test"], 
            ["Sun Dec 13 2015 18:00:00 GMT-0600 (Central Standard Time)",10804,"0",""], 
            ["Wed Dec 09 2015 18:00:00 GMT-0600 (Central Standard Time)",3878,"0",""],
            ["Tue Dec 08 2015 18:00:00 GMT-0600 (Central Standard Time)",1312,"0",""], 
            ["Mon Dec 07 2015 18:00:00 GMT-0600 (Central Standard Time)",2565,"1","test"]
        ];
    
        for (var i = 0; i < dataArr.length; i++) {
            data.addRow([
                new Date(dataArr[i][0].substr(4, 20)),
                dataArr[i][1],
                dataArr[i][2],
                dataArr[i][3]
            ]);
        }
      
        var chart = new  google.visualization.AnnotationChart(document.getElementById('chart_div'));
        var options = {
            displayAnnotations: true
        };
        chart.draw(data, options);
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div" style="width: 900px; height: 500px;"></div>

    【讨论】:

    • 那行不通。它将“无效日期”值传递给数据表,然后创建“无效字符”错误。
    【解决方案3】:

    感谢这两个答案。我通过更改填充数据表的方式解决了这个问题。我使用 datatable.setValue 方法来单独设置单元格的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多