4

我制作了这个脚本来获取一些 json 信息:

 $(document).ready(function(){

    $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      timeout: 30000,
      success: function(data) {

            // $('#output ul').append('<li>The feed loads fine');
            $('#output ul').empty();

            $.each(data.posts, function(i,data){ 

                $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');


            });

        },
        error: function(){
            $('#output ul').append('<li>Error');
        }
    });
 });

但我想每 x 秒更新一次提要。我读了很多关于它的书,但我可以完成它。

我怎样才能做到这一点?

4

4 回答 4

2
var foo = function() {
    $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      timeout: 30000,
      success: function(data) {

            // $('#output ul').append('<li>The feed loads fine');
            $('#output ul').empty();

            $.each(data.posts, function(i,data){ 

                $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');


            });

        },
        error: function(){
            $('#output ul').append('<li>Error');
        }
    });
    setTimeout(foo, 3000);
}

foo();

3000 是您希望在再次调用该函数之前等待的毫秒数。

于 2013-02-07T10:04:34.360 回答
2

使用setInterval重复调用代码块,并将您的代码放在某个函数中并将函数名称传递给setInterval第一个参数。您可以传递匿名函数而不是创建一个新函数,repeatMe但我更喜欢创建函数以使代码更具可读性。

function repeatMe(){
 $.ajax({
  url: 'url',
  dataType: 'json',
  cache: true,
  timeout: 30000,
  success: function(data) {

        // $('#output ul').append('<li>The feed loads fine');
        $('#output ul').empty();

        $.each(data.posts, function(i,data){ 

            $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');


        });
    },
    error: function(){
        $('#output ul').append('<li>Error');
    }
 });
}

setInterval(repeatMe, 5000);

编辑在第一次完成工作后,最好使用 setTimeout 而不是 setInterval 在成功发送下一次更新调用。我们还将 setTimeout 设置为错误,以保持重复调用更新。

function repeatMe(){
 $.ajax({
  url: 'url',
  dataType: 'json',
  cache: true,
  timeout: 30000,
  success: function(data) {
        // $('#output ul').append('<li>The feed loads fine');
        $('#output ul').empty();
        $.each(data.posts, function(i,data){ 

            $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');
            setTimeout(repeatMe, 5000);
        });
    },
    error: function(){
        $('#output ul').append('<li>Error');
        setTimeout(repeatMe, 5000);
    }
 });
}
于 2013-02-07T10:05:30.883 回答
1
setInterval(function(){

  $.ajax({
      url: 'url',
      dataType: 'json',
      cache: true,
      success: function(data) {

            // $('#output ul').append('<li>The feed loads fine');
            $('#output ul').empty();

            $.each(data.posts, function(i,data){ 

                $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');


            });

        },
        error: function(){
            $('#output ul').append('<li>Error');
        }
    });

},30000);  //30000 == 30 seconds
于 2013-02-07T10:05:14.080 回答
1
$(document).ready(function(){
    setInterval(function() {
       $.ajax({
         url: 'url',
         dataType: 'json',
         cache: true,
         timeout: 30000,
         success: function(data) {    
            // $('#output ul').append('<li>The feed loads fine');
            $('#output ul').empty();

            $.each(data.posts, function(i,data){ 

                $('#output ul').append('<li><a href="'+data.image+'"><img class="thumb" src="'+data.image+'" alt="" /></a><h3>'+data.title+'</h3><p>'+data.text+'</p></li>');


            });

           },
            error: function(){
               $('#output ul').append('<li>Error');
           }
        });
    }, 1000 * x);
 });

上面的代码应该可以正常工作。只需在此处输入所需的秒数而不是 x:1000 *x

请记住,您应该将指向函数的指针作为第一个参数传递给 setInterval。如果你只是这样做,setInterval($.ajax({...}), x)你实际上是说 $.ajax 返回的函数应该每 x 秒执行一次。但它返回 jQuery 对象,而不是函数。这就是为什么在我的代码中 ajax 被包裹着function() {}

于 2013-02-07T10:05:39.223 回答