全局变量 - jquery

时间:2012-12-08 17:25:43

标签: jquery callback global-variables

大家。我有以下示例脚本:

<script type="text/javascript">
$(document).ready(function() {
    var url =  "http://api.twitter.com/1/statuses/user_timeline/codinghorror.json";
    $.getJSON(url + "?callback=?", null, function(tweets) {
        for(i in tweets) {
            tweet = tweets[i];
            $("#tweet-list").append(tweet.text + "<hr />");
        }
    });
});
</script>

现在我想刷新点击时从网址获取的数据。我添加了一个全局变量'content'并尝试:

<script type="text/javascript">
$(document).ready(function() {
$("body").click(function(){ 
    var content="";
    var url =  "http://api.twitter.com/1/statuses/user_timeline/codinghorror.json";
    $.getJSON(url + "?callback=?", null, function(tweets) {
        for(i in tweets) {
            tweet = tweets[i];
            content+=tweet.text + "<hr />";
        }
    });
    $("#tweet-list").html(content); 
});
});
</script>

但它没有显示任何内容,然后我想也许是因为'$(“#tweet-list”)。html(内容);'在'content + = tweet.text +“


”'之前执行,所以我尝试在()之后添加一个回调函数:

<script type="text/javascript">
$(document).ready(function() {
$("body").click(function(){ 
    var content="";
    var url =  "http://api.twitter.com/1/statuses/user_timeline/codinghorror.json";
    $.getJSON(url + "?callback=?", null, function(tweets,after) {
        for(i in tweets) {
            tweet = tweets[i];
            content+=tweet.text + "<hr />";
        }
    after(content){$("#tweet-list").html(content);}; 
    });

});
});
</script>

还没有工作(什么都没有),有什么帮助吗? THX。

2 个答案:

答案 0 :(得分:2)

Ajax是异步的,因此您必须等待响应并返回一些数据才能对其执行任何操作。当您尝试使用之后的 ajax函数时,它尚未完成,并且没有内容。当有实际内容要追加并且ajax调用完成时,你必须在回调中做到这一点:

$(document).ready(function() {
    $("body").click(function(){ 
        var content="",
            url =  "http://api.twitter.com/1/statuses/user_timeline/codinghorror.json";
        $.getJSON(url + "?callback=?", null, function(tweets,after) {
            for(key in tweets) {
                if (tweets.hasOwnProperty(key)) {
                    content+=tweets[key].text + "<hr />";
                }
            }
            $("#tweet-list").html(content); 
        });
    });
});

答案 1 :(得分:1)

一旦AJAX请求完成,您需要更改HTML:

$.getJSON(url + "?callback=?", null, function(tweets) {
    var content = "";
    for(i in tweets) {
        var tweet = tweets[i];
        content += tweet.text + "<hr />";  
    }
    $("#tweet-list").html(content);
});

此外,您不需要全局变量,因此请使用var关键字。