Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 抽象AJAX调用以便使代码更具动态性_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript 抽象AJAX调用以便使代码更具动态性

Javascript 抽象AJAX调用以便使代码更具动态性,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我尝试使用一个典型的jqueryajax调用,并将其封装在自己的函数中,这样我就可以使用不同的参数调用它,使其更具动态性。我似乎缺少了一些关于成功的信息,或者一般的回调信息。基本功能是将JSON传递给GoogleCharts实现。如果我硬编码JSON,但我想从RESTAPI中获取它,那么这是可行的。现在我有一小段代码: var getAjax = function (url){ $.ajax({ url: url, dataType: json,

我尝试使用一个典型的jqueryajax调用,并将其封装在自己的函数中,这样我就可以使用不同的参数调用它,使其更具动态性。我似乎缺少了一些关于
成功的信息
,或者一般的回调信息。基本功能是将JSON传递给GoogleCharts实现。如果我硬编码JSON,但我想从RESTAPI中获取它,那么这是可行的。现在我有一小段代码:

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

您应该在函数中返回一个承诺,然后通过
.then()
解决它<代码>成功:绘图图不是很动态。注意以下几点

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')

查看以了解更多信息

我想您的语法错误正在阻止代码工作

数据类型应为字符串:

dataType: 'json',
关于响应数据的注意事项-如果您需要原始数据,而不是经过解析的数据对象,您可以从原始XHR。。。无需将解析后的数据展开为另一个字符串

var drawChart = function (data, status, jqXHR) {
    var jsonString = jqXHR.responseText;
    var parsedData = data;
    //...

将解析
success
的方法第一个参数。如果您需要一个JSON字符串,那么您必须
JSON.stringify(responseData)
,它将返回一个JSON字符串

即使设置了
数据类型:“json”
,jQuery仍将解析响应

请阅读jQuery文档中的
数据类型

数据类型:“json”:将响应评估为json并返回JavaScript 对象跨域“json”请求转换为“jsonp”,除非 请求的请求选项中包含jsonp:false。JSON 严格解析数据;任何格式不正确的JSON都将被拒绝并删除 将抛出一个分析错误。从jQuery1.9开始,还需要一个空响应 拒绝;服务器应该返回null或{}响应。 (有关正确json格式的更多信息,请参见json.org。)


不确定这是否是一个输入错误,但是,
dataType:json,
应该是
dataType:'json',
。除了上面提到的输入错误@RocketHazmat之外,您的代码没有什么直接的错误。您检查过控制台是否有错误吗?刚刚测试过,除了输入错误之外,ajax函数工作正常,并调用成功处理程序。只是观察一下,
success:drawChart
一点也不通用。如果你想从更一般的意义上看到一种方法,请查看我的答案。您可以通过
then()
或甚至传递回调函数来执行每个ajax请求的特定回调in@scniro是的,我同意它不是很通用,但我正在尝试先把我的基本功能写下来,然后再使绘图图更灵活。我需要申报什么特别的东西才能使用承诺吗?或者是我在导入jQuery时免费得到的东西(不管怎样,我必须为谷歌图表这么做),你不必这样做。OP中的方法没有本质上的错误。这并不能回答OP存在的问题。是的,我想这是一个输入错误-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu<代码>成功:drawChart
似乎不太“动态”,感谢投票结果。btwI同意这是一个更好的解决方案,因为它允许在外部定义回调。仅供参考,downvote不是我的。我还在为回调绞尽脑汁,我想问:在
.then(function(response){}
response
代表什么?它是
then()返回的吗
或者是我自己写的东西?还是来自我的语句体?这解决了一个直接的问题,但现在我得到了一个与Google图表库相关的TypeError。这是另一个需要解决的问题,并且是独立的。接受这个答案。这个答案不能解决您的问题,Google API需要一个JSON字符串不是一个Javascript对象!@kappaismyname我在上面加了一个注释。直接的问题是你的函数不是泛型的还是你有一个拼写错误?嗯,也许我误读了question@SteveFenton,现在答案是完整的:P将投票。