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

最初の繰り返しで動作し、2 回目は失敗します。

関数は msg id =1 および time =0 で始まり、ページロード時に最初のループを開始します。2 番目のループでは、x 秒後に呼び出すようにタイムアウトを設定します。

私は何を間違っていますか、助けてください

4

2 に答える 2

0

成功関数で定義するためftime、成功関数の外では使用できません。

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

}

アップデート:

コードにはもう 1 つ問題があります。

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 に答える
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 に答える