每秒执行一次Ajax请求

 love四叶草health 发布于 2023-02-12 23:01

我对一个php文件进行了ajax调用.我收到了结果.现在我正在调查是否可以让ajax请求每1秒自动执行一次.我将结果发布到名为的输入字段中hidden.如何在不必调用函数的情况下每三秒执行一次ajax调用?

    $.ajax({
            type: 'POST',
            url: 'increment.php',
            data: $(this).serialize(),
            dataType: 'json',
            success: function (data) {
                    $('#hidden').val(data);// first set the value     

            }
    });

T.J. Crowder.. 38

您可以通过重复的一系列setTimeout调用来完成此操作.(不要使用setIntervalajax电话,你会得到在任何时间混乱,setInterval将火关即使前一个尚未完成的下一个Ajax调用.)

使用setTimeout安排的第一个电话,然后当它完成计划下一次,等:

var interval = 1000;  // 1000 = 1 second, 3000 = 3 seconds
function doAjax() {
    $.ajax({
            type: 'POST',
            url: 'increment.php',
            data: $(this).serialize(),
            dataType: 'json',
            success: function (data) {
                    $('#hidden').val(data);// first set the value     
            },
            complete: function (data) {
                    // Schedule the next
                    setTimeout(doAjax, interval);
            }
    });
}
setTimeout(doAjax, interval);

请注意,我正在使用complete,而不是success安排下一个呼叫,以便中断(临时丢弃'网络连接,无论如何)不会导致进程中断.

3 个回答
  • 你可能想要考虑的是服务器发送事件(SSE)

    这是一种HTML5技术,Javascript将" 长时间轮询 "服务器端点(您的PHP文件)以查看是否发生了任何更改.长轮询基本上是JS(我不确定它是否使用Ajax或其他技术)每秒向端点发送请求的地方

    你可以这样试试:

    #/your_js
    var evtSource = new EventSource("increment.php");
    evtSource.onmessage = function(e) {
        $('#hidden').val(e.data);
    }
    

    要发送数据,您可以进行ajax调用,将更新的JSON对象发送到服务器,就像您拥有:

      $(document).on("click", ".your_object", function(data) {
         $.ajax({
                    type: 'POST',
                    url: 'increment.php',
                    data: $(this).serialize(),
                    dataType: 'json'
            });
       });
    

    这只会在您执行事件时打开Ajax请求,并且您的应用程序将每秒"监听"响应.如您所知,Ajax长轮询是超级资源密集型的,因此如果您想要真正的"实时"技术,那么查看Web套接字的东西会更好,但不管怎样,这将是一个更高效的系统而不仅仅是使用普通的ajax

    需要注意的是 - 您必须更改自己increment.php以处理不同的响应类型

    2023-02-12 23:14 回答
  • 可以使用 setInterval

    1)将ajax保留在函数中.

    function fun() {
    $.ajax({
                type: 'POST',
                url: 'increment.php',
                data: $(this).serialize(),
                dataType: 'json',
                success: function (data) {
                        $('#hidden').val(data);// first set the value     
    
                }
        });
    }
    

    2)现在使用setInterval,你可以每秒执行一次.

    var interval = setInterval(fun, 1000);
    

    3)暂停/清除使用 clearInterval

    clearInterval(interval);
    

    4)正如其他指出的那样使用setIntervalfor ajax是不明智的,所以尝试使用

    var interval;
    function callAjax() {
      $.ajax({
                    type: 'POST',
                    url: 'increment.php',
                    data: $(this).serialize(),
                    dataType: 'json',
                    success: function (data) {
                            $('#hidden').val(data);// first set the value 
                            interval = setTimeout(callAjax, 1000);   
                    }
            });
    }
    callAjax();
    //clearTimeout(interval);
    

    2023-02-12 23:15 回答
  • 您可以通过重复的一系列setTimeout调用来完成此操作.(不要使用setIntervalajax电话,你会得到在任何时间混乱,setInterval将火关即使前一个尚未完成的下一个Ajax调用.)

    使用setTimeout安排的第一个电话,然后当它完成计划下一次,等:

    var interval = 1000;  // 1000 = 1 second, 3000 = 3 seconds
    function doAjax() {
        $.ajax({
                type: 'POST',
                url: 'increment.php',
                data: $(this).serialize(),
                dataType: 'json',
                success: function (data) {
                        $('#hidden').val(data);// first set the value     
                },
                complete: function (data) {
                        // Schedule the next
                        setTimeout(doAjax, interval);
                }
        });
    }
    setTimeout(doAjax, interval);
    

    请注意,我正在使用complete,而不是success安排下一个呼叫,以便中断(临时丢弃'网络连接,无论如何)不会导致进程中断.

    2023-02-12 23:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有