在异步jQuery getJSON调用之后访问变量

时间:2012-11-11 17:17:42

标签: javascript jquery asynchronous getjson

我是异步Javascript调用的新手,因此我很难弄清楚如何在getJSON调用修改后访问某个对象的数据。

我有一个带有空数组(单词)和一个mainMethod和一个subMethod的对象。 mainMethod获取一些JSON并根据JSON数据多次调用subMethod。 subMethod访问不同的JSON文件,并使用它来填充对象的空数组(单词)。

当我创建对象时,我调用mainMethod。我想得到对象的数组,但只有在它被JSON调用填充之后。

我知道它必须使用延迟方法或其他东西,但我一直在调用中得到一个空白数组。我该怎么做呢?谢谢!

对象代码:

    function Something(numTerms){
        var self=this;
        this.words=[];
        this.wordsNeeded=numTerms;
        this.mainMethod = function(){
            $.getJSON("external JSON url", function(data) {
                var setIds=self.getDifferentSets(data, self.wordsNeeded).ids;
                for(var i=0; i<setIds.length; i++){
                    self.subMethod(setIds[i]);
                }   

            });
        }
     this.getDifferentSets= function(data, num){
        var obj= {};
        obj.ids=[];
        obj.wordsFound=0;
        var currSet=0;
        while(obj.wordsFound<num){
                obj.ids.push(data.sets[currSet].id);
                obj.wordsFound+=data.sets[currSet].term_count;
                currSet++;
        }
        return obj;
    }
        this.subMethod= function(id){
            $.getJSON("some other external JSON url", function(data) {
                var numberTerms= data.terms.length;
                var terms=[];
                if(self.wordsNeeded<numberTerms) numberTerms=self.wordsNeeded;

                for(var i=0;i<numberTerms;i++){
                    var word= new Object();
                    word.term=data.terms[i].term;
                    word.definition=data.terms[i].definition;
                    terms.push(word);
                }
                for(var i=0;i<terms.length;i++){
                    var word= {"term":terms[i].term, "definition":terms[i].definition};
                    self.words.push(word); //Changing the object's variable
                }
                self.wordsNeeded-=numberTerms;
            });
        }
    }

创建对象:

    $(document).ready(function(){   
        $("#fetch_button").click(function(){
           var num=Number($("#numTerms").val());
           var some= new Something(num);
           some.mainMethod();
           var words=some.words; //How can I get the final value of some.words AFTER it has been changed by the JSON calls?
        });
    })

1 个答案:

答案 0 :(得分:0)

您可以在主要功能

中尝试return this吗?
function Something(numTerms){
    var self=this;
    //Blah blah blah

    return this;
}