Javascript JSON中的意外标记u

Javascript JSON中的意外标记u,javascript,json,ajax,Javascript,Json,Ajax,我有一个Ajax函数,用于发送和检索字符串。一旦Ajax接收到字符串,它就会调用一个名为drawChart的函数drawChart然后使用JSON将该字符串转换为数组。parse我还使用Google Charts使用传入的数据创建图表。一切正常。然而,这张图表正在制作中,看起来一切正常;我在控制台中遇到此错误: 未捕获(承诺中)SyntaxError:JSON中的意外标记u位于 位置0 在JSON.parse()处 在图纸上(索引js?c1496931740:24) 匿名的 我确实研究过这个错误

我有一个Ajax函数,用于发送和检索字符串。一旦Ajax接收到字符串,它就会调用一个名为
drawChart
的函数
drawChart
然后使用
JSON将该字符串转换为数组。parse
我还使用Google Charts使用传入的数据创建图表。一切正常。然而,这张图表正在制作中,看起来一切正常;我在控制台中遇到此错误:

未捕获(承诺中)SyntaxError:JSON中的意外标记u位于 位置0 在JSON.parse()处 在图纸上(索引js?c1496931740:24) 匿名的

我确实研究过这个错误,它发生在
JSON.parse中传递的数据类型未定义时。我试图使用
console.log(typeof(data))
来检查它是否真的是未定义的,但它输出了两个东西。首先它输出字符串,然后输出未定义的字符串。之后,它显示错误,但图表显示成功。这是我的密码:

function aggregator(field, size) {
    /*Build jSON query string*/
    var jString = '{"aggs": { "group_by_date": { "terms": { "field": "' + field + '", "size" : ' + size + '} } } }';

    google.charts.setOnLoadCallback(drawChart);   /*Load Chart*/

    /*Sending and retrieving data using Ajax*/
    $.ajax({
        url: 'index.php',
        type: 'post',
        datatype: 'json',
        data: {
            qSet: jString,
            size: size
        },
        success: drawChart
    });
}

var drawChart = function(data)
{   
    console.log(typeof(data));
    data = JSON.parse(data);  /*Convert the data back into an array*/

    var chartData = new google.visualization.DataTable();  /*Set up the chart*/

    chartData.addColumn('string', 'year'); 
    chartData.addColumn('number', 'Records');

    /*For loop to add rows*/
    for (var i = 0; i < data.length; ++i){
        chartData.addRow(data[i]);
    }

    var options = {
        title: 'Arrival Data'
    };

    var chart = new google.visualization.BarChart(document.getElementById('chartContainer'));
    chart.draw(chartData, options);
};
函数聚合器(字段、大小){
/*构建jSON查询字符串*/
var jString='{“aggs”:{“group_by_date”:{“terms”:{“field”:“+field+”,“size”:“+size+'}}”;
google.charts.setOnLoadCallback(drawChart);/*加载图表*/
/*使用Ajax发送和检索数据*/
$.ajax({
url:'index.php',
键入:“post”,
数据类型:“json”,
数据:{
qSet:jString,
尺码:尺码
},
成功:绘图
});
}
var drawChart=函数(数据)
{   
控制台日志(数据类型);
data=JSON.parse(data);/*将数据转换回数组*/
var chartData=new google.visualization.DataTable();/*设置图表*/
chartData.addColumn('string','year');
chartData.addColumn('number','Records');
/*用于循环以添加行*/
对于(变量i=0;i
这个错误的原因是什么?为什么在执行console.log(typeof(data))时会收到两个输出(字符串,然后是未定义的)?我怎样才能修好它

为什么在执行console.log(typeof(data))时会收到两个输出(字符串,然后是未定义的)

因为您要调用函数两次

  • google.charts.setOnLoadCallback(drawChart)
  • success:drawChart
  • 只有当你得到数据时才调用它


    google.charts.setOnLoadCallback
    用于指定API可用时要运行的函数

    创建一个新函数,该函数发出Ajax请求,并在加载API时调用该函数

    google.charts.setOnLoadCallback(sendAjaxRequest); /*Load Chart*/
    
    function sendAjaxRequest() {
    
      $.ajax({
        url: 'index.php',
        type: 'post',
        datatype: 'json',
        data: {
          qSet: jString,
          size: size
        },
        success: drawChart
      });
    }
    

    您应该使用JSON.stringify(yourjsonstring)方法来创建JSON并将其发送到服务器。现在您只发送字符串。@guest271314-问题告诉您:“首先它输出字符串,然后输出未定义的”@NumanKIZILIRMAK-是什么让您认为服务器希望数据是JSON编码的,而不是application/x-www-form-urlencoded?
    数据类型
    应该是
    数据类型
    @guest271314-“您在$.ajax()中提到的数据是上一个注释中的字符串,不是未定义的”-请阅读我以前的注释。请阅读我的答案。函数将被调用两次。传递给第一个参数的值每次都不同。