对我的jQuery代码进行小修改

时间:2011-04-18 02:22:21

标签: javascript jquery ajax

您好我如何编辑以下代码以自动重新加载指定div的内容?

下面我的代码重新加载了一个名为form.php的文件,我希望用div代替。

<style>
    .loading { 
        height:24px; 
        background: url('http://b.static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif') 50% 50% no-repeat; 
        }
</style>

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js'></script>
<script language='JavaScript'>
setInterval( 'SANAjax();', 10000 );  ///////// 10 seconds

$(function() 
{
    SANAjax = function()
    {     
        $('#reservationdetails')
            .empty()
            .addClass('loading')
            .load('form.php', function()
            {
                $('#reservationdetails').removeClass('loading') 
            });

    }
});
</script>

谢谢!

2 个答案:

答案 0 :(得分:4)

重新排序代码:

$(function() {
    var SANAjax = function(){
        $('#reservationdetails').empty().addClass('loading')
          .load('form.php', function() {
             $(this).removeClass('loading') 
          });
    }
    setInterval(SANAjax, 10000 );
});

我认为#reservationdetails是您要加载响应的div。

无需将字符串传递给setInterval。始终将函数引用传递给它(setTimeout)相同。

答案 1 :(得分:2)

Felix Kling的回答是正确的。

另外值得注意的是:以这种方式使用setInterval是非常糟糕的做法,因为您不确定.load是否会在您指定的10秒内返回。 (例如,想想移动设备。)即使它确实在9秒内返回,但在你发出下一个请求之前它只有一秒钟。最好在回调中做setTimeout,如下所示:

$(function () {
    function loadReservationDetails() {
        $('#reservationdetails')
            .empty()
            .addClass('loading')
            .load('form.php', function () {
                $(this).removeClass('loading');
                setTimeout(loadReservationDetails, 10000);
        });
    }

    loadReservationDetails();
});