我有以下代码:
$.ajax({
async: false,
url: 'chart_data.php',
data: {'option':'high', 'id':id},
dataType: 'json',
success: function(response){
alert('in');
var data = google.visualization.arrayToDataTable(response);
var options= { curveType:'none', width: 300, height: 200, hAxis: {title:'Years'}, vAxis: {title:'Value'}, title: 'High Time - Low Value' };
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
});
在一个网页中。我希望基于下拉菜单显示图表。该功能的其余部分工作得很好。我检查了 Firebug,JSON 响应带有 200 OK 状态消息。事实上,我可以在 Firebug 中看到所有的 JSON。
问题仍然存在,为什么alert('in');
永远不会触发,为什么谷歌不将它的图表加载到相关的图表 div 中?
编辑:
添加错误回调时出现以下错误:parseerror SyntaxError:JSON.parse:意外字符。
这是来自服务器的 JSON 响应:
[['Year', 'Low', 'High'],['1984', 318000, 395000],['1984', 418000, 495000],
['1984', 380000, 450000],['1984', 410000, 460000],['1984', 410000, 460000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 435000, 485000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 435000, 485000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 318000, 395000],
['1985', 418000, 495000],['1985', 380000, 450000],['1985', 420000, 470000],
['1985', 420000, 470000]]
它看起来对我来说是正确的,虽然我不是 100% 确定 JSON 结构。
编辑:
我做了一些改变,似乎我走得更远了。首先,我header('Content-type: application/json');
从我的 php 脚本中删除了该行。然后我将其更改dataType: 'json'
为dataType: 'html'
.
它现在在 $.ajax() 调用中加载成功回调。当我尝试将其发送到 Google 的 arrayToDataTable() 方法时,它不喜欢文本响应。
如果我可以将返回的字符串(看起来像上面的 JSON 响应,实际上不是 JSON 响应)解析为 javascript 数组,那么我会很高兴。我希望。
编辑:
我最终在我的成功回调中使用了一个 eval 语句将 http 响应转换为一个数组eval('var res = ' + response);
。这可能不是最好的方法。如果有人有更好(更安全)的方式来做到这一点,那就太好了。
编辑:
我不太喜欢使用 eval 语句,所以我研究了将返回字符串更改为数组的其他方法。在遇到这个小宝石之前,我并没有真正关心他们中的任何一个:
response = JSON.parse(response);
这没有问题。
感谢大家的帮助。