【问题标题】:Getting error Uncaught Error: Data for arrayToDataTable is not an array出现错误未捕获的错误:arrayToDataTable 的数据不是数组
【发布时间】:2021-01-08 15:41:09
【问题描述】:

我正在尝试绘制图表,但收到此错误“未捕获的错误:arrayToDataTable 的数据不是数组。”尝试了很多东西,但没有任何效果。

这是我的控制器

    [HttpPost]
    public ActionResult GetChartData()
    {
        List<SubmittedSurveys> sResult = new List<SubmittedSurveys>();

        using (SurveyDBContext dc=new SurveyDBContext())
        {
            sResult = dc.SubmittedSurveys.ToList();
        }
        var chartData = new object[sResult.Count + 1];
        chartData[0] = new object[]
        {
       "SurveyID","StartedDateTime"
        };
        int j = 0;
        foreach (var i in sResult)
        {
            j++;
            chartData[j] = new object[] { i.SurveyID, i.StartedDateTime.ToString() };
        }
        return Json(chartData, JsonRequestBehavior.AllowGet);
    }

这是我对这个控制器的看法

   <html>
   <head>
   <title>
    Column Charts for Submitted Surveys
   </title>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
  </script>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript" src="https://www.google.com/jsapi"></script>


  <script>

    var chartData;
    google.load("visualization", "1", { packages: ["corechart"] });
    $(document).ready(function () {
        $.ajax({
            url: '@Url.Action("GetChartData", "Reports")',
            type: "POST",
            dataType: 'json',
            contentType:"application/json",
            success: function (data) {
                chartData = data.d;
            },
            error: function () {
                alert("Error loading data!");
            }
        }).done(function () {
            //after complete loading data
            drawChart();
        });
    });
    function drawChart() {
        
        var data = google.visualization.arrayToDataTable(chartData);
      
        var Options = {
            title: "Survey",
            pointSize: 5


        };

        var columnChart = new 
     google.visualization.columnChart(document.getElementById('DailyStatisticss'));

        columnChart.draw(data, Options);
    }

    </script>
   </head>
    <body>
   <div id="DailyStatisticss"></div>
   </body>
   </html>

请帮助我在哪里做错了。我试图像 Json.Parse(chartData) 那样解析 ChartData。但没有用。不知道我哪里做错了

【问题讨论】:

  • 把它放在数据类型之后和之前成功。查看控制台窗口中是否有任何内容可以引导您找到原因。 error: function (, err) { console.log(, err) },也把这个放到success里——console.log(response); var jsonresult = 响应
  • 数据很可能是一个对象 ({}) 而不是一个数组 ([])
  • 请告诉我如何添加为数组。我尝试了错误:函数(xhr,状态,错误){ var errorMessage = xhr.status + ':' + xhr.statusText alert('Error - ' + errorMessage); } 但得到相同的错误和响应是不确定的。
  • 数据未正确返回。我正在查看问题所在。这是控制器动作中的东西。 json。
  • 如果我需要在控制器中更改某些内容,请告诉我确切的信息

标签: javascript model-view-controller google-visualization


【解决方案1】:

我现在将数据作为数组返回。但是,您必须尝试一下,如果它返回您想要的内容,请告诉我。我没有使用与您相同版本的 javascript。

对于 JavaScript,这就是我所拥有的

var chartData;
    google.load("visualization", "1", { packages: ["corechart"] });
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var jsonData = $.ajax({
            url: '@Url.Action("GetChartData", "Reports")',
            type: "Get",
            dataType: 'json',
            async: false
        }).responseText;

        var dataVis = google.visualization.arrayToDataTable(jsonData);

        var Options = {
            title: "Survey",
            pointSize: 5


        };

        var Chart = new google.visualization.columnChart(document.getElementById('DailyStatisticss'));

        Chart.draw(dataVis, Options);
    }

你可以把它放在你的$(document).ready(function () {});

对于数组,它非常简单,但不确定它是否是您所追求的......

[HttpGet]
public ActionResult GetData()
{
    var survey = from s in db.SubmittedSurveys
                     select new { surveyId = s.SurveyID, startedDateTime = s.StartedDateTime.ToString() };

    return Json(survey.ToArray(), JsonRequestBehavior.AllowGet);
}

您可以将db 更改为您在上下文中使用的任何内容,或者制作这样的内容 YourEntity db = new YourEntity(); 放在上面var survey

【讨论】:

  • 我认为,既然我已经对此进行了更多研究,您的问题是您正在提取的数据与您尝试使用的图表。目前尚不清楚您要填充什么。如果您想要一年中的 # 个,那么您应该计算和分组,以便 2014 年的所有内容将填充该年的一列。做一个记录数组不会给你.. IMO。
  • 你的问题是日期。你需要把它恢复为当年。您拥有的代码可以工作,但您需要修复日期列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多