1

我正在使用 JQuery 和 JSON 从服务器获取数据。我定义getBooksDoneFunc 为变量,因为我不仅需要能够调用此函数一次(何时getBooks完成)。不幸的是,我无法getBooksDoneFuncsignInOKas内部调用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(){ });但在内部调用。

4

3 回答 3

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);
  }
});
于 2013-04-17T00:09:35.900 回答
1

如果window["getBooksDoneFunc"]();有效,则有效getBooksDoneFunc(),使用的想法window是当您想要访问全局函数但您不知道存储在变量中的函数名称时。

在您的情况下,放置一个硬编码字符串意味着更少,只是做getBooksDoneFunc()是相同的,因为您已经将函数自身(而不是函数名称的字符串)存储在变量中。

不起作用的是,如果变量不是全局变量,请检查范围。

于 2013-04-17T00:13:34.107 回答
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");
}
于 2013-04-17T00:31:00.860 回答