Php 从jQuery向Google图表传递选项
我试图通过使用jQuery调用PHP页面来自动创建图表(使用GoogleCharts API)。我将返回数据的JSON,目前只返回选项的字符串 图表“数据”工作正常,但我很难自动传递“选项”。下面是我的代码片段: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
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);