Javascript ajax从C获取未定义的数据#

Javascript ajax从C获取未定义的数据#,javascript,c#,asp.net,ajax,google-visualization,Javascript,C#,Asp.net,Ajax,Google Visualization,我想用谷歌图表建立一个网页。我试图用c#作为web表单构建它,并将数据从本地数据库获取到javascript。但这是行不通的,我有数据在ajax的响应中是未定义的。 这是c语言的代码# [WebMethod] [ScriptMethod(ResponseFormat=ResponseFormat.Json)] 公共静态对象[]GetChartData() { 列表数据=新列表(); //这里MyDatabaseEntities是我们的dbContext 使用(MyDatabaseEntities

我想用谷歌图表建立一个网页。我试图用c#作为web表单构建它,并将数据从本地数据库获取到javascript。但这是行不通的,我有数据在ajax的响应中是未定义的。 这是c语言的代码#

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
公共静态对象[]GetChartData()
{
列表数据=新列表();
//这里MyDatabaseEntities是我们的dbContext
使用(MyDatabaseEntities dc=new MyDatabaseEntities())
{
data=dc.GoogleChartDatas.ToList();
}
var chartData=新对象[data.Count+1];
chartData[0]=新对象[]{
“产品类别”,
“收入金额”
};
int j=0;
foreach(数据中的var i)
{
j++;
chartData[j]=新对象[]{i.Product_Category,i.RevenueAmount};
}返回图表数据;
}
javascript代码是:

        <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<!-- Javascript Job-->
<script src="Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script>
    var chartData; // globar variable for hold chart data
    google.load("visualization", "1", { packages: ["corechart"] });

    // Here We will fill chartData

    $(document).ready(function () {

        $.ajax({
            url: "GoogleChart.aspx/GetChartData",
            data: "",
            dataType: "json",
            type: "post",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                chartData = data.d;
                alert(chartData);
            },
            error: function () {
                alert("Error loading data! Please try again.");
            }
        }).done(function () {
            // after complete loading data
            google.setOnLoadCallback(drawChart);
            drawChart();
        });
    });


    function drawChart() {
        var data = google.visualization.arrayToDataTable(chartData);

        var options = {
            title: "Company Revenue",
            pointSize: 5
        };

        var pieChart = new google.visualization.PieChart(document.getElementById('chart_div'));
        pieChart.draw(data, options);

    }

</script>
<div id="chart" style="width: 500px; height: 400px">
</div>


请帮忙!!如何在ajax中获取我的表数据并将它们放在图表中?

首先,建议不要使用
jsapi
加载库,根据

通过
jsapi
loader仍然可用的谷歌图表版本不再持续更新。从现在起,请使用新的gstatic加载程序(
loader.js

这只会更改
load
语句

google.charts.load('current', {
  callback: drawChart,
  packages: ['corechart']
});
如上所述,可以在
load
语句中设置
回调

回调
将让您知道何时加载了GoogleCharts以及dom

因此不需要
setOnLoadCallback
$(文档)。就绪

至于其余的,建议使用以下设置

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<!-- Javascript Job-->
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
    google.charts.load('current', {
      callback: drawChart,
      packages: ['corechart']
    });

    function drawChart() {
      $.ajax({
        url: "GoogleChart.aspx/GetChartData",
        data: "",
        dataType: "json",
        type: "post",
        contentType: "application/json; charset=utf-8",
      }).done(function (data) {
        var data = google.visualization.arrayToDataTable(data.d);
        var options = {
          title: "Company Revenue",
          pointSize: 5
        };
        var pieChart = new google.visualization.PieChart(document.getElementById('chart_div'));
        pieChart.draw(data, options);
      }).fail(function (jqXHR, textStatus, errorThrown) {
        console.log("Error: " + errorThrown);
      });
    }
</script>
<div id="chart" style="width: 500px; height: 400px">
</div>

google.charts.load('current'{
回调:图纸,
软件包:['corechart']
});
函数绘图图(){
$.ajax({
url:“GoogleChart.aspx/GetChartData”,
数据:“,
数据类型:“json”,
类型:“post”,
contentType:“应用程序/json;字符集=utf-8”,
}).完成(功能(数据){
var data=google.visualization.arrayToDataTable(data.d);
变量选项={
标题:“公司收入”,
点数:5
};
var pieChart=new google.visualization.pieChart(document.getElementById('chart_div'));
绘制图表(数据、选项);
}).fail(函数(jqXHR、textStatus、errorshown){
log(“错误:+errorshown”);
});
}

首先,根据

通过
jsapi
loader仍然可用的谷歌图表版本不再持续更新。从现在起,请使用新的gstatic加载程序(
loader.js

这只会更改
load
语句

google.charts.load('current', {
  callback: drawChart,
  packages: ['corechart']
});
如上所述,可以在
load
语句中设置
回调

回调
将让您知道何时加载了GoogleCharts以及dom

因此不需要
setOnLoadCallback
$(文档)。就绪

至于其余的,建议使用以下设置

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<!-- Javascript Job-->
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
    google.charts.load('current', {
      callback: drawChart,
      packages: ['corechart']
    });

    function drawChart() {
      $.ajax({
        url: "GoogleChart.aspx/GetChartData",
        data: "",
        dataType: "json",
        type: "post",
        contentType: "application/json; charset=utf-8",
      }).done(function (data) {
        var data = google.visualization.arrayToDataTable(data.d);
        var options = {
          title: "Company Revenue",
          pointSize: 5
        };
        var pieChart = new google.visualization.PieChart(document.getElementById('chart_div'));
        pieChart.draw(data, options);
      }).fail(function (jqXHR, textStatus, errorThrown) {
        console.log("Error: " + errorThrown);
      });
    }
</script>
<div id="chart" style="width: 500px; height: 400px">
</div>

google.charts.load('current'{
回调:图纸,
软件包:['corechart']
});
函数绘图图(){
$.ajax({
url:“GoogleChart.aspx/GetChartData”,
数据:“,
数据类型:“json”,
类型:“post”,
contentType:“应用程序/json;字符集=utf-8”,
}).完成(功能(数据){
var data=google.visualization.arrayToDataTable(data.d);
变量选项={
标题:“公司收入”,
点数:5
};
var pieChart=new google.visualization.pieChart(document.getElementById('chart_div'));
绘制图表(数据、选项);
}).fail(函数(jqXHR、textStatus、errorshown){
log(“错误:+errorshown”);
});
}

不,这对我不起作用。我仍然没有在上面的帖子中添加任何数据,感谢您添加了数据的图片,但我本应该更清楚——如果是json对象,查看
data.d
的内容会很有帮助,然后使用
arrayToDataTable
将不起作用——google需要一种特定的格式来直接从json创建数据表-->--使用浏览器的开发者控制台,请共享-->
console.log(json.stringify(data.d))的结果不,那对我不起作用。我仍然没有在上面的帖子中添加任何数据,感谢您添加了数据的图片,但我本应该更清楚——如果是json对象,查看
data.d
的内容会很有帮助,然后使用
arrayToDataTable
将不起作用——google需要一种特定的格式来直接从json创建数据表-->--使用浏览器的开发者控制台,请共享-->
console.log(json.stringify(data.d))的结果为什么
chartData=data.d?为什么
chartData=data.d