0

我在延迟和脚本执行方面遇到问题。

我有以下代码:

$(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(只是一个例子):

$SQL = MySQL_query("SELECT * FROM table")
    while($data = MySQL_fetch_array($SQL))
    {
        //// OUTPUTS A TABLE WITH INFORMATION 
    }

现在,这整个事情的执行有很多延迟(加载时间很长),有时会产生脚本错误,因为加载时间太长。如果我延长刷新间隔,情况会开始好转(滞后仍然存在)并且我不会收到执行错误。我需要有一个很短的间隔来满足我的需要,但我无法找到一种有效的方法。关于如何改进这一点的任何建议?

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

4

3 回答 3

3

尝试这个。只有在服务器响应后才开始下一个请求。

$(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)
          }
  });
}
于 2013-04-15T18:52:02.853 回答
3

我会setTimeout改用以下方法解决它:

$(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 秒。

于 2013-04-15T18:52:03.407 回答
1

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

由于 ajax 请求需要花费不确定的时间才能完成,我建议您在第一个完成使用时触发下一个 ajax 请求setTimeout(),依此类推,这样您就永远不会有多个 ajax 请求同时进行,因此每个后续 ajax呼叫从前一个完成的已知时间开始。

您可能想要解决为什么您的服务器响应请求需要这么长时间,但是如果您的服务器有时需要很长时间才能响应,您也可以延长 ajax 调用的超时时间:

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();
});
于 2013-04-15T18:52:17.577 回答