AJAX中的迭代函数调用 [英] Iteration Function Call in AJAX

查看:88
本文介绍了AJAX中的迭代函数调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I need to make an Ajax call for every x seconds, to read the data from xml and use xml data as variable to call the same function after x seconds

下面是代码:

<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);

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

its working on first iteration, 2nd fails.

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

Functions starts with msg id =1 and time =0 to start the first loop on pageload. in 2nd loop, settimeout to call after x seconds.

我在做什么错,请帮忙

推荐答案

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

you define ftime in succes function, so that means it's not available outside succes function,

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

Define ftime in main function that should solve your problem.

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);

}

更新:

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

And there is one more problem in your code,

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

jQuery.ajax() performs an asynchronous HTTP (Ajax) request. So ftime will not set immediately and fetchAjaxContent will call continuously with same ftime, you should take all code into ajax success function.

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);

}

这篇关于AJAX中的迭代函数调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆