如果定义为var,如何调用函数调用?

时间:2013-04-17 00:01:05

标签: javascript jquery

我使用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(){ });之外定义,但在其中调用。

3 个答案:

答案 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");
}