JQuery行为不端的可变范围

时间:2011-11-11 08:33:12

标签: jquery json scope

我有以下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>"

我希望返回行与输出相同......任何想法如何?我认为通过将它附加到一个全局变量它可以做到,但似乎没有。

1 个答案:

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