Php 从jQuery向Google图表传递选项

Php 从jQuery向Google图表传递选项,php,jquery,google-visualization,Php,Jquery,Google Visualization,我试图通过使用jQuery调用PHP页面来自动创建图表(使用GoogleCharts API)。我将返回数据的JSON,目前只返回选项的字符串 图表“数据”工作正常,但我很难自动传递“选项”。下面是我的代码片段: var jsonData = $.ajax({ url: "http://server.com/charts/dev/data.php", dataType:"json", async: false }).response

我试图通过使用jQuery调用PHP页面来自动创建图表(使用GoogleCharts API)。我将返回数据的JSON,目前只返回选项的字符串

图表“数据”工作正常,但我很难自动传递“选项”。下面是我的代码片段:

    var jsonData = $.ajax({
        url: "http://server.com/charts/dev/data.php",
        dataType:"json",
        async: false
    }).responseText;

    var optionData = $.ajax({
        url: "http://server.com/charts/dev/options.php",
        dataType:"text",
        async: false
    }).responseText;

    var data = new google.visualization.DataTable(jsonData);
    var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
    chart.draw(data, optionData);
如果我删除了试图获取“optionData”的jQuery,然后自己提供它,图表就会加载。否则,我将获得“无法读取null的属性“0”作为错误显示(控制台上没有任何内容)

PHP页面“options.PHP”如下所示(目前):


您能否测试以替换optiondata的数据类型

发件人:

致:


要对ajax调用进行故障排除,请定义错误、成功和完整回调:

var optionData = $.ajax({
    url: "http://server.com/charts/dev/options.php",
    dataType:"json", // I think using 'text' here is wrong as `draw` expects objects
    async: false,
    error: function(xhr, status, err){
        console.log('Error: ' + xhr); // you can also output status and err if needed
    },
    success: function(data){
        console.log('Success: ' + data);
    },
    complete: function(data){
        console.log('Complete: ' + data);
    }
}).responseText;
还有一件事,要确保PHP返回一个对象json,请在PHP中对其进行编码:

echo json_encode($your_data);

不管我怎么做,jQuery似乎总是返回一个字符串,而不是一个对象

这对于“google.visualization.DataTable”来说很好,但是“google.visualization.AreaChart”需要一个对象。我现在用的是这样的东西,效果非常好:

var optionData = jQuery.parseJSON($.ajax({
    url: "http://server.com/charts/release/getChartOptions.php",
    dataType:"json"
    async: false
}).responseText);

谢谢你的帮助

提供数据时的数据与console.log时显示的数据有什么区别?ajax请求返回的
{width:400,height:240}
与您提供数据和控制台时的结果完全相同。记录它吗?@Stuart它似乎完全相同
{width:400,height:240}
。有什么简单的方法可以让我找出返回的对象的类型吗?是的,您可以使用
typeof
。示例<代码>控制台.log(类型opopDATA)你还应该检查你对代码< >数据< /代码>和<代码>图表< /代码>以确保它们被正确地创建。要考虑的一件事是,Ajax指定<代码>字符串< /代码>,但是你确定你需要一个字符串吗?您输出的内容看起来像一个对象,而不是字符串。@Stuart根据typeof,它们都是字符串。如果我手动指定数据,它将成为一个对象。知道我怎样才能把输出变成一个对象吗<代码>变量optionData=$.ajax({url:http://server.com/charts/dev/options.php,异步:false});console.log(jsonData类型);控制台日志(可选数据类型);var optionData={宽度:400,高度:240};控制台日志(可选数据类型)此日志:
字符串对象
很遗憾没有区别。我还尝试省略数据类型。
var optionData = $.ajax({
    url: "http://server.com/charts/dev/options.php",
    dataType:"json", // I think using 'text' here is wrong as `draw` expects objects
    async: false,
    error: function(xhr, status, err){
        console.log('Error: ' + xhr); // you can also output status and err if needed
    },
    success: function(data){
        console.log('Success: ' + data);
    },
    complete: function(data){
        console.log('Complete: ' + data);
    }
}).responseText;
echo json_encode($your_data);
var optionData = jQuery.parseJSON($.ajax({
    url: "http://server.com/charts/release/getChartOptions.php",
    dataType:"json"
    async: false
}).responseText);