我使用JQuery和JSON从服务器获取数据。我定义了getBooksDoneFunc
因为我需要能够不仅一次调用此函数(当getBooks
完成时)。很遗憾,我无法从getBooksDoneFunc
内部signInOK
呼叫window["getBooksDoneFunc"]();
。为什么?调用此函数的最佳方法是什么?
function getBooks(){ return $.getJSON( "bookstore.json" ); }
var getBooksDoneFunc = function(json) {
$.each(json.books, function(i, json){ .......... });
}
getBooks().done(getBooksDoneFunc);
function signInOK(){
window["getBooksDoneFunc"]();
}
PS。 window["getBooksDoneFunc"]();
的想法取自SO answer
更新:
var booksJSON = {};
window["getBooksDoneFunc"](booksJSON);
必须使用参数调用 getBooksDoneFunc
,但getBooksDoneFunc
的调用失败。 signInOK
在$(document).ready(function(){ });
之外定义,但在其中调用。
答案 0 :(得分:2)
尝试:
function getBooks(){
return $.getJSON( "bookstore.json" );
}
window.getBooksDoneFunc = function(json) {
$.each(json.books, function(i, json){ .......... });
}
getBooks().done(getBooksDoneFunc);
$(document)ready(function() {
function signInOK(){
var booksJSON = {};
window.getBooksDoneFunc(booksJSON);
}
});
答案 1 :(得分:1)
如果window["getBooksDoneFunc"]();
有效,那么getBooksDoneFunc()
,使用window
的想法是当你想要访问全局函数但你不知道存储的函数名时变量。
在你的情况下,放一个硬编码字符串意味着更少,只是做getBooksDoneFunc()
是相同的,因为你已经将函数self(不是函数名的字符串)存储在变量中。
不起作用的是,如果变量不是全局变量,请检查范围。
答案 2 :(得分:0)
我会这样做有点不同,虽然我不太了解signInOK()函数。它将如何接收“json”数据。我将重建getBooks函数并重新考虑signInOk函数。这是一个开始:
function getBooks() {
$.getJSON("bookstore.json").done(function (json) {
getBooksDoneFunc(json);
});
}
var getBooksDoneFunc = function(json) {
$.each(json.books, function(i, json){ .......... });
};
...
getBooks();
function signInOK(){
getBooksDoneFunc("some json data");
}