0

我需要每 x 秒进行一次 Ajax 调用,从 xml 读取数据并使用 xml 数据作为变量在 x 秒后调用相同的函数

这是代码:

<script type="text/javascript">

function fetchAjaxContent(msg,time) {

        setTimeout(function(){
        $.ajax({
            type: "GET",
            url: "ajax.php?msg="+msg+"&p="+Math.random(),
            dataType: "xml",
            success: function(xml) {
                $(xml).find('msgs').each(function(){
                    var content = $(this).find('content').text();
                    var ftime = $(this).find('time').text();
                    $("#page-wrap").html(content);

                });
            }           

        });

        msg=msg+1;
        if(msg=4)
        msg=1;
        ftime=parseInt(ftime)*1000;
        fetchAjaxContent(msg,ftime);    
    },time);

}

fetchAjaxContent(1,0);

它在第一次迭代中工作,第二次失败。

函数以 msg id =1 和 time =0 开始,以启动页面加载的第一个循环。在第二个循环中,在 x 秒后调用 settimeout。

我在做什么错,请帮忙

4

2 回答 2

0

拿这些代码

    msg=msg+1;
    if(msg=4)
    msg=1;
    ftime=parseInt(ftime)*1000;
    alert(ftime);
    fetchAjaxContent(msg,ftime);

我在这里发现了一个问题:

if(msg=4) should be if(msg == 4)

另一个问题:

error是一个函数,所以它应该

error: function() {
  alert('Error');
}

在整个尝试以下:

   function fetchAjaxContent(msg, time) {
     setTimeout(function() {
        $.ajax({
            type: "GET",
            url: "ajax.php",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('msgs').each(function() {
                    var content = $(this).find('content').text();
                    var ftime = $(this).find('time').text();
                    $("#page-wrap").html(content);
                });
                msg = msg + 1;
                if (msg == 4) msg = 1;
                ftime = parseInt(ftime) * 1000;
                alert(ftime);
                fetchAjaxContent(msg, ftime);
            },
            error: function() {
                alert("error");
            }
        });
    }, time);
 }
fetchAjaxContent(1,0);
于 2012-05-13T18:44:26.117 回答
0

ftime在 succes 函数中定义,这意味着它在 succes 函数之外不可用,

在应该解决您的问题的主要功能中定义ftime

function fetchAjaxContent(msg,time) {
        var ftime;
        setTimeout(function(){
        $.ajax({
            type: "GET",
            url: "ajax.php?msg="+msg+"&p="+Math.random(),
            dataType: "xml",
            success: function(xml) {
                $(xml).find('msgs').each(function(){
                    var content = $(this).find('content').text();
                    ftime = $(this).find('time').text();
                    $("#page-wrap").html(content);

                });
            }           

        });

        msg=msg+1;
        if(msg=4)
        msg=1;
        ftime=parseInt(ftime)*1000;
        fetchAjaxContent(msg,ftime);    
    },time);

}

更新:

您的代码中还有一个问题,

jQuery.ajax()执行异步HTTP (Ajax) 请求。所以ftime不会立即设置,并且fetchAjaxContent会以相同的方式连续调用ftime,您应该将所有代码放入ajax成功函数中。

function fetchAjaxContent(msg,time) {
        setTimeout(function(){
        $.ajax({
            type: "GET",
            url: "ajax.php?msg="+msg+"&p="+Math.random(),
            dataType: "xml",
            success: function(xml) {
                $(xml).find('msgs').each(function(){
                    var content = $(this).find('content').text();
                    var ftime = $(this).find('time').text();
                    $("#page-wrap").html(content);

                    msg=msg+1;
                    if(msg=4)
                      msg=1;
                    ftime=parseInt(ftime)*1000;
                    fetchAjaxContent(msg,ftime);    
                });
            }           

        });
    },time);

}
于 2012-05-13T19:06:53.610 回答