JSON数据和函数

时间:2013-04-30 21:28:17

标签: javascript ajax json

所以我在理解传递JSON数据方面遇到了麻烦。

function getFooterContent(){
//ajax call to get json file 
$.getJSON("scripts/pageData/footer/footerData.json", function(jsonData){
    console.log(jsonData);
    return jsonData;
}).fail(function(){
    console.log("fail");    
    return -1;
});

//Return the json file 
}

function someFunction(){
    var someContent = new Object();
someContent = getFooterContent();
console.log(someContent);
}

现在我正在调用JSON文件。当我在console.log(jsonData)时,我得到一个Object,这就是我想要的。那么我可以一些内容。内容。虽然当jsonData返回到someFunction并且我的console.log(someContent)时,我得到了未定义。我不明白,我认为它会像getJSON函数中的对象一样。

2 个答案:

答案 0 :(得分:4)

getJSON是异步调用的,所以你没有得到你期望的结果。

让我解释一下:

function getFooterContent(){
//ajax call to get json file 
$.getJSON("scripts/pageData/footer/footerData.json", 
  function(jsonData){ // This function is executed when request is ready and server responds with OK
    console.log(jsonData);
    return jsonData;
}).

fail(function(){ // This when servers responds with error
    console.log("fail");    
    return -1;
});

//Return the json file 
// You are returning undefined actually
}

function someFunction(){
    var someContent = new Object();
someContent = getFooterContent();
console.log(someContent);
}

你需要:

function someFunction(){
    var someContent = new Object();
    getFooterContent(function(someContent){
      // someContent is passed by getFooterContent
      console.log(someContent);

    });
}

以下是将参数传递给回调JavaScript: Passing parameters to a callback function

的方法

对于您的功能,它将是:

function getFooterContent(done, fail){
  $.getJSON("scripts/pageData/footer/footerData.json", 
  function(jsonData){ // This function is executed when request is ready and server responds with OK
    // console.log(jsonData);
    // return jsonData;
    done.call(null, jsonData); // or done.apply()
}).

fail(function(){ // This when servers responds with error
    // console.log("fail");    
    // return -1;
    fail.call(); // or fail.apply()

});
}

答案 1 :(得分:2)

这是因为$.getJSON是异步的。因此,当getFooterContent()返回时,此时尚未检索到JSON数据,因此undefined

您应该做的是让getFooterContent()返回promise个对象。

function getFooterContent() {
    var promise = $.getJSON("url");
    return promise;
}

function someFunction() {
    var promise = getFooterContent();
    var outsideCopy;

    promise
    .done(function(data) {
        outsideCopy = data;
        console.log(outsideCopy);
    })
    .fail(function(e) {
        console.log('Error');
        console.log(e);
    });
}

通过删除变量声明可以缩短上面的示例。我把它们留在了,所以代码更容易理解