抽象一个AJAX调用,这样我就可以使我的代码更具动态性

时间:2015-10-21 18:25:04

标签: javascript jquery json ajax

我正在尝试采用典型的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)来定义函数,但在我的阅读中我看到我应该这样做,但我不确定哪种方法是正确的。

3 个答案:

答案 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。)