0

嗨,我正在 RubyOnRails 中创建一个站点。我在客户端显示一些内容时遇到问题。我想要做的就像新闻一样,每 10 秒后,新闻就会改变。我所做的是我做了一个 ajax 从我的服务器获取新闻,服务器在 json 响应中返回数组。现在我在客户端拥有了所有的新闻数组,我想以 10 秒的间隔一个一个地显示。我已尝试使用此代码,但除了最新消息外,它没有显示任何内容。

function get_news(){
    $.ajax({
          url : "my.json",
          success:function(data){
              // data is array of json like [{"html" : "dfsf"},{"html":"ddd"}]
              news_change(data);
          }
    });
}

get_news();

function news_change(feed){
    $.each(feed,function(index,f){
        var feed_html = f.html;
        $('#news_div').fadeOut('slow', function(){
          $('#news_div').html(feed_html);
          $('#news_div').fadeIn('slow');
        });
        sleep(10000);
    });
}

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
    }
}

当我执行此代码时,它只显示最后的新闻。它还挂起我的浏览器。请告诉我这是为什么?

4

1 回答 1

1

使用 setTimeout 或 setInterval,它们会在一定的毫秒数后异步执行代码。循环是同步的,并在执行时锁定浏览器。

// this will execute get_news every 10,000 ms
var newsInterval = setInterval(get_news, 10000);

// if you ever want to stop the interval, use clearInterval
clearInterval(newsInterval);

请注意,get_news执行 ajax 调用可能需要一些时间,这意味着您的新闻不会每 10 秒更新一次。

编辑:要每 10 秒遍历一次新闻数组,您需要将该news_change函数传递给 setInterval:

var newsInterval;

function get_news(){
    $.ajax({
        url : "my.json",
        success:function(data) {
            newsInterval = setInterval(function () {
                news_change(data);
            }, 10000);
        }
    });
}

get_news();

// if you ever want to stop the interval, use clearInterval
clearInterval(newsInterval);
于 2012-12-09T12:21:30.340 回答