首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax on interval

Ajax on interval
EN

Stack Overflow用户
提问于 2013-04-16 02:48:02
回答 3查看 633关注 0票数 0

我遇到了延迟和脚本执行的问题。

我有以下代码:

代码语言:javascript
复制
$(function(){
    $("#results").html("Loading work order queue...");
    setInterval("showWorkOrders();", 15000)
});

function showWorkOrders()
{
      $.ajax({
          url: '/ajax/job_queue_ajax.php',
          type: 'POST',
          cache: false,
          data: 'update=true',
          success: function(data)
          {
              $("#results").html(data);
              $('span#ref_msg').html('');
          },
          error: function()
          {
              a = new customModal('ajax');
              $("#results").html("<font class='msgDivError'>"+a.ajaxError+"</font>");   
              $('span#ref_msg').html('');
          }
  });
}

我的后台PHP (仅举个例子):

代码语言:javascript
复制
$SQL = MySQL_query("SELECT * FROM table")
    while($data = MySQL_fetch_array($SQL))
    {
        //// OUTPUTS A TABLE WITH INFORMATION 
    }

现在,整个程序的执行都有很大的延迟(加载需要很长时间),有时还会因为加载时间太长而产生脚本错误。如果我延长刷新间隔,事情开始变得更好(延迟仍然存在),并且我不会得到执行错误。我需要一个很短的间隔来满足我的需求,但我找不到一种有效的方法来做到这一点。对如何改进这一点有什么建议吗?

此外,在具有刷新器的页面上停留一段时间后,浏览器会变得非常慢,甚至锁定……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-16 02:52:03

我会使用setTimeout来解决这个问题:

代码语言:javascript
复制
$(function(){
    $("#results").html("Loading work order queue...");
    showWorkOrders();
});

function showWorkOrders()
{
      $.ajax({
          url: '/ajax/job_queue_ajax.php',
          type: 'POST',
          cache: false,
          data: 'update=true',
          success: function(data)
          {
              $("#results").html(data);
              $('span#ref_msg').html('');
                      setTimeout("showWorkOrders();", 5000)
          },
          error: function()
          {
              a = new customModal('ajax');
              $("#results").html("<font class='msgDivError'>"+a.ajaxError+"</font>");   
              $('span#ref_msg').html('');
                      setTimeout("showWorkOrders();", 5000)
          }
  });
}

这意味着在执行新的ajax请求之前,它将等待5秒,前一个请求可以花费它想要的任何时间。在重试之前仍然等待5秒。

票数 3
EN

Stack Overflow用户

发布于 2013-04-16 02:52:03

尝尝这个。仅在服务器响应后启动下一个请求。

代码语言:javascript
复制
$(function(){ 
    $("#results").html("Loading work order queue...");
    showWorkOrders();
});

function showWorkOrders()
{
      $.ajax({
          url: '/ajax/job_queue_ajax.php',
          type: 'POST',
          cache: false,
          data: 'update=true',
          success: function(data)
          {
              $("#results").html(data);
              $('span#ref_msg').html('');
          setTimeout(showWorkOrders, 15000);

          },
          error: function()
          {
              a = new customModal('ajax');
              $("#results").html("<font class='msgDivError'>"+a.ajaxError+"</font>");   
              $('span#ref_msg').html('');
              setTimeout(showWorkOrders, 15000)
          }
  });
}
票数 3
EN

Stack Overflow用户

发布于 2013-04-16 02:52:18

我建议在完成后使用下一个Ajax,而不是在interval上使用Ajax。

由于ajax请求需要不确定的时间才能完成,因此我建议您在第一个ajax请求完成时触发下一个ajax请求,就像这样,这样就不会有多个ajax请求同时进行,因此每个后续ajax调用都会从前一个调用完成后的已知时间开始。

您可能希望解决服务器响应请求花费这么长时间的问题,但如果服务器有时需要很长时间响应,您也可以延长ajax调用的超时时间:

代码语言:javascript
复制
function showWorkOrders()
{
      $.ajax({
          timeout: 15000,
          url: '/ajax/job_queue_ajax.php',
          type: 'POST',
          cache: false,
          data: 'update=true',
          success: function(data)
          {
              $("#results").html(data);
              $('span#ref_msg').html('');
              setTimeout(showWorkOrders, 5000);
          },
          error: function()
          {
              a = new customModal('ajax');
              $("#results").html("<font class='msgDivError'>"+a.ajaxError+"</font>");   
              $('span#ref_msg').html('');
              setTimeout(showWorkOrders, 5000);
          }
  });
}

$(function(){
    $("#results").html("Loading work order queue...");
    showWorkOrders();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16022599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档