如何使JS函数等待加载JSON数据?

时间:2015-07-01 16:54:14

标签: javascript jquery json

这有效:

function getDataJSON() {
    var queryString = "https://www.examplesite.com/someJSON.json";

    $.getJSON(queryString, function(data) {
        doStuffWithData(data)
    });
 }

 function doStuffWithData(JSON) {
     // some code that refers to JSON
 }

 getDataJSON();

但是这抱怨在doStuffWithData()中的某个地方未定义变量(JSON):

function getDataJSON(callback) {
    // Gets share data and runs callback when received
    var queryString = "https://www.examplesite.com/someJSON.json";

    $.getJSON(queryString, function(data) {
        if(typeof callback === "function") {
            callback(data);
        }
    });
 }

 function doStuffWithData(JSON) {
     // some code that refers to JSON
 }

getDataJSON(doStuffWithData());

我可能做错了什么? $ .getJSON()调用需要一两秒钟,所以我需要等待它并在它之后执行操作。我认为问题在于代码执行顺序,但可能是因为我误解了如何正确地将数据传递给回调函数。

如果我可以将数据加载到我所有其他函数都可以访问的变量中,那会更好。

2 个答案:

答案 0 :(得分:7)

此:

link_to category.name, articles_path(name: category.name.downcase)

应该是这样的:

getDataJSON(doStuffWithData());

否则它立即调用该函数并尝试将函数的结果传递给getDataJSON

答案 1 :(得分:1)

您需要在此调用中忽略括号 getDataJSON(doStuffWithData());应为getDataJSON(doStuffWithData)。原因是doStuffWithData是函数,doStuffWithData()是函数的retrun值。