所以我在理解传递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函数中的对象一样。
答案 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);
});
}
通过删除变量声明可以缩短上面的示例。我把它们留在了,所以代码更容易理解