AJAX中的迭代函数调用

时间:2012-05-13 18:40:27

标签: jquery ajax

我需要每隔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开始,以启动pageload上的第一个循环。在第二个循环中,settimeout在x秒后调用。

我做错了什么,请帮忙

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

在main函数中定义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);

}