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

标签 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?
        });
    })

最佳答案

你可以尝试在主函数中返回这个

function Something(numTerms){
    var self=this;
    //Blah blah blah

    return this;
}

关于javascript - 在异步 jQuery getJSON 调用后访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333482/

相关文章:

javascript - Collection_select 在 javascript 的帮助下使用参数重定向

javascript - 在 .load() 页面之后执行 javascript

css - 在 IE8 中使用 jquery 加载 css 的问题

python - 如何重复请求任务

angular - 如何将完成的回调与注入(inject) Angular 2单元测试结合起来

javascript - 围绕 JS 中的原型(prototype)展开思考

javascript - 如何通过 AJAX 解析和使用 HTML 和变量?

javascript - 调整谷歌地图 v3 中的圆圈大小(MVC 对象)

javascript - PHP 在页面上退出 ajax abort()

javascript - wait/async 如何处理 Unresolved promise