我有以下js + jQuery代码和一些行为不端的var范围......或者至少是一个行为不端的编码器:-p
var lookup_output=""; //believe this makes it a global scope
function lookupWord(word) {
var url = 'http://localhost:3000/jianti/' + word + '.json';
lookup_output = "abc";
$.getJSON(url, function(data){
$.each(data, function(i, word_data){
lookup_output += "<div> trad: " + word_data.fanti + "<br>";
lookup_output += "simp: " + word_data.jianti + "<br>" ;
lookup_output += "pinyin: " + word_data.pinyin + "<br>" ;
lookup_output += "def: " + word_data.def + "<br>" ;
lookup_output += "</div><br>";
alert(lookup_output);
});
});
lookup_output += "123";
return lookup_output;
}
问题是该行
return lookup_output;
回馈
"abc123"
而行
alert(lookup_output);
给出
"abc123<div> trad: 交流<br>simp: 交流<br>pinyin: jiāo liú<br>def: exchange/give-and-take/to exchange/to alternate/communication/alternating current (electricity)<br></div><br>"
我希望返回行与输出相同......任何想法如何?我认为通过将它附加到一个全局变量它可以做到,但似乎没有。
答案 0 :(得分:4)
您没有确定范围问题,您对$.getJSON
调用的异步性质有疑问。 $.getJSON
是一个AJAX调用,“AJAX”中的“A”代表“异步”。当您致电$.getJSON
时,它会返回您继续lookup_output += "123"
,之后,$.getJSON
回调函数将被调用。
通常的方法是添加更多回调:
function lookupWord(word, callback) {
var url = 'http://localhost:3000/jianti/' + word + '.json';
$.getJSON(url, function(data){
var lookup_output = "abc";
$.each(data, function(i, word_data){
lookup_output += "<div> trad: " + word_data.fanti + "<br>";
//...
});
lookup_output += "123";
callback(lookup_output);
});
}
然后,你会这样称呼它:
lookupWord("someword", function(lookup_output) {
// Do whatever needs to be done with the result.
});