我正在尝试采用典型的jQuery AJAX调用并将其包装在自己的函数中,因此我可以使用不同的参数调用它以使其更具动态性。我似乎错过了success
或一般回调的内容。基本功能是将JSON传递给Google图表实现。如果我对JSON进行硬编码但是我想从我的REST API中获取它,这是有效的。现在我有一小段代码:
var getAjax = function (url){
$.ajax({
url: url,
dataType: json,
success: drawChart
});
}
var drawChart = function (data) {
jsonData = data;
console.log(jsonData);
// Create our data table out of JSON data loaded from server.
var jsonDataTable = new google.visualization.DataTable(jsonData);
// Instantiate and draw our chart, passing in some options.
//var chartPie = new google.visualization.PieChart(document.getElementById('pie'));
//var chartBar = new google.visualization.BarChart(document.getElementById('bar'));
var chartJson = new google.visualization.BarChart(document.getElementById('json'));
//chartPie.draw(trailerData);
//chartBar.draw(chewyData);
chartJson.draw(jsonDataTable);
}
console.log('got here');
getAjax("data/dashboard0");
当我检查控制台时,我可以从jQuery看到200
,但我的窗口中什么都没有。我也尝试使用getAjax(data)
来定义函数,但在我的阅读中我看到我应该这样做,但我不确定哪种方法是正确的。
答案 0 :(得分:2)
我想你的语法错误阻止代码工作......
dataType
应为字符串:
dataType: 'json',
关于响应数据的注意事项 - 如果您需要原始数据而不是解析数据对象,则可以从原始XHR获取该数据...无需将解析后的数据展开为另一个字符串。
var drawChart = function (data, status, jqXHR) {
var jsonString = jqXHR.responseText;
var parsedData = data;
//...
答案 1 :(得分:1)
您应该在函数中返回一个promise,然后通过.then()
解析它。 success: drawChart
不是很有活力。请注意以下内容......
var getAjax = function (url){
return $.ajax({ url: url, dataType: 'json' });
}
[...]
getAjax('data/dashboard0').then(function(response) {
// callback - do drawing tuff
});
console.log('got here before callback')
查看jQuery deferred docs了解更多信息
答案 2 :(得分:0)
解析success
方法的第一个参数。如果你需要一个JSON字符串,那么你必须JSON.stringify(responseData)
,它将返回一个JSON字符串。
即使你设置dataType: 'json'
,jQuery仍然会解析响应。
请阅读dataType
的jQuery文档:
dataType:" json":将响应评估为JSON并返回JavaScript 宾语。跨域" json"请求转换为" jsonp"除非 请求在其请求选项中包含jsonp:false。 JSON 数据以严格的方式解析;任何格式错误的JSON都被拒绝了 抛出一个解析错误。从jQuery 1.9开始,空响应也是如此 被拒绝;服务器应该返回null或{}的响应。 (有关正确的JSON格式的更多信息,请参阅json.org。)