jQuery $ .getScript如何引用该函数之外的检索数据

时间:2011-11-25 19:43:52

标签: jquery ajax json

我有一个看起来像这样的JSON文件:

var sourceData = [
{
"id":"c1",
"title":"What color are your eyes?"
}
]

我想通过jQuery加载它,以便稍后检索数据:

var myData = $.getScript('data_c1.json', function(data, textStatus){
console.log(data); 
return data
});
console.log(myData)

当我查看控制台时,有两件事情不符合我的期望:

  1. 日志以相反的顺序命中控制台
  2. data正确返回,但myData会返回$.getScript函数本身,而不是数据。
  3. 为了记录,我也试过

    $.getJSON("sourceData_c1.json", function(json) {console.log(json);});
    

    这根本不适用于我。

    我很难过。任何帮助非常感谢!

    此外,将var sourceData =置于JSON文件中是否有效?

1 个答案:

答案 0 :(得分:0)

如果您使用$.getJSON(),那么您的文件输出需要采用JSON格式(如果没有变量声明):

{ "status" : "success",
  "msg"    : "2 items returned.",
  "output" : [
    { "id" : "c1", "title" : "What color are your eyes?" },
    { "id" : "c2", "title" : "What color are your ears?" }
  ]
}
  

回调传递返回的JavaScript文件。这通常是   没用,因为此时脚本已经运行了。

     

脚本在全局上下文中执行,因此它可以引用其他内容   变量并使用jQuery函数。包含的脚本可以有一些   对当前页面的影响

来源:http://api.jquery.com/jquery.getscript/

基本上当你使用$.getScript()时,一旦回调函数被触发,这意味着你加载的脚本中的代码已经在DOM中并且可以被访问:

$.getScript('data_c1.json', function(data){
    //since we are in the callback function, the `sourceData` variable should be added to the DOM and accesible
    console.log(sourceData);
});

请注意,如果要返回JavaScript,则脚本文件应具有.js文件扩展名。如果您想要返回JSON,请使用$.getJSON()或将AJAX调用的contentType设置为json,以便正确解析。

另请注意,myData变量设置为jqXHR对象,而不是AJAX调用的响应。