【问题标题】:Hold ajax call in every minute calling section在每分钟通话部分保持ajax通话
【发布时间】:2011-03-15 17:24:33
【问题描述】:

我在页面中每秒调用一次 ajax.. 这里服务器页面返回随机生成的数字,使用这个数字(转换为秒)我在触发另一个函数ajax成功 .它有效

我的问题

假设 random number = 5 表示 trigger() 函数5 秒后使用 setTimeout 调用,但请记住ajax 调用每 1 秒触发一次,因此触发函数也被调用了很多次。

我想让 ajax 调用等到触发函数执行。这意味着我想暂停该 ajax 调用直到恢复后 5 秒

我该怎么做?

我的编码

//this ajax is called every minute
        $.ajax({
            type: "POST",
            url: 'serverpage', 
            data: ({pid:1}),
            success: function(msg) { 

                var array = msg.split('/');
                if(array[0]==1){
                setTimeout(function() {  trigger(msg);          },array[1]+'000');
             }
            }

        }); 


//and my trigger function
function trigger(value)
{
    alert("i am triggered !");
}

服务器响应可能

1/21/51/ 101/1

这里是 1/3(这转换为秒)

【问题讨论】:

  • array[1]+'000'?你应该为此被用棍子打。 parseInt(array[1], 10)*1000 是正确的方法!

标签: javascript jquery ajax


【解决方案1】:

看起来您应该在触发函数或错误回调中触发 ajax 调用。在页面准备好时触发一次,然后在调用成功函数时触发它。

function ajaxCall() {
    $.ajax({
        type: "POST",
        url: 'serverpage', 
        data: ({pid:1}),
        success: function(msg) { 
            var array = msg.split('/');
            if(array[0]==1){
                setTimeout(function() {
                    trigger(msg);
                    ajaxCall();
                }, parseInt(array[1])*1000);
            }
        },
        error: function() {
            setTimeout(ajaxCall, 1000);
        }
    }); 
}

$(ajaxCall);

注意:您应该回复一些 json 而不是您的自定义数据格式“1/3”。像“{success:1,delay:3}”这样的东西会更可靠。

【讨论】:

  • 感谢您的建议。我得到了结果......我不知道如何触发那个错误处理程序。所以我使用了服务器的 0 状态 .... 非常感谢您的想法
  • error 回调是针对与 ajax 相关的错误,而不是功能性错误。你不能真的随意触发它,它会在阻止 ajax 调用成功时触发:4XX、5XX、超时、互联网不可用等。
【解决方案2】:

您可以从您的“成功”回调函数递归调用您的 ajax 函数,或者在您的情况下最好从触发函数调用。

【讨论】:

    【解决方案3】:

    与其在计时器中调用 AJAX,不如在每次执行 trigger 函数后调用它。

    //and my trigger function
    function trigger(value)
    {
        alert("i am triggered !");
        MyAjaxFunction();
    }
    

    您也必须在页面加载时调用它一次:

    $(document).ready(function(){
        MyAjaxFunction();
    });
    

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 2013-11-23
      • 1970-01-01
      • 2019-04-17
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多