0

我在 jQuery 中返回一个带有 Ajax 调用的 JSON 字符串,我想使用 jqPlot 将该数据泵入条形图中。

我从另一个 Stack-Overflow 帖子中获得了 JSON 转换代码,但不明白为什么这不起作用。我的代码:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(DTO), //JSON.stringify(AnDParms), combined, 
    url: "GetAdmitsDischarges.asmx/GetAandD",
    dataType: "json",
    success: function (data) {
        //do chart stuff here.
        var line1 = [];
        for (var prop_name in data.d) {
            line1.push([prop_name, data[prop_name]])
        }
        var ticks = ['Admits', 'Discharges'];

        var plot1 = $.jqplot('chartdiv', [line1], {
            title: 'Admits & Discharges',
            series: [{ renderer: $.jqplot.BarRenderer}],
            axesDefaults: {
                tickRenderer: $.jqplot.CanvasAxisTickRenderer
            },
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer
                }
            }
        });
        //to prove the flow is working...
        //alert("Data: " + data.d);

    }, //end of success
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus + ' ' + errorThrown + ' ' + XMLHttpRequest);
    } //end of error
});   //end of ajax call

在 Firebug 中,line1 的值是(从 0 到 32):

[[“0”,未定义],[“1”,未定义],...[“31”,未定义],[“32”,未定义]]

而数据的价值是:

对象 { d="{"Admits":"35","Discharges":"36"}" }

谢谢你尽你所能的帮助...

4

2 回答 2

1

问题是您的 JSON 结构:

{
    "Admits": "35",
    "Discharges": "36"
}

您提供的是 JSON 对象,但 jqplot 需要数组:

[
  ["Admits", 35],
  ["Discharges", 36]
]
于 2013-08-20T16:54:19.173 回答
0

在 Encosia.com 的 Dave Ward 的帮助下,我终于弄明白了……如果您还没有查看他的博客,请立即前往……它非常适合您的所有 .Net/jQuery 需求。

这是我的javascript:

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(DTO),
        url: "GetAdmitsDischarges.asmx/GetAandD",
        dataType: "json",
        success: function (data) {
            var jqPlotData = $.map(data.d, function (value, key) {
                if (key != "__type") {
                    return [value]; //was key, value
                }
            });
            var ticks = ['Admits', 'Discharges'];
            var plot1 = $.jqplot('chartdiv', [jqPlotData], {
                title: 'Admits & Discharges',
                seriesDefaults: {
                    renderer: $.jqplot.BarRenderer,
                    rendererOptions: { varyBarColor: true },
                    pointLabels: { show: true }
                },
                axes: {
                    xaxis: {
                        renderer: $.jqplot.CategoryAxisRenderer,
                        ticks: ticks
                    }
                },
                highlighter: { show: false }

            });

另外,我从我的 Web 服务中删除了 JSON 序列化,并且只返回了对象。希望这对其他人有帮助。

于 2013-08-22T19:01:38.357 回答