我对异步 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/