Php 区间上的Ajax

Php 区间上的Ajax,php,jquery,ajax,Php,Jquery,Ajax,我在延迟和脚本执行方面遇到了问题 我有以下代码: $(function(){ $("#results").html("Loading work order queue..."); setInterval("showWorkOrders();", 15000) }); function showWorkOrders() { $.ajax({ url: '/ajax/job_queue_ajax.php', type: 'POST

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

我有以下代码:

$(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('');
          }
  });
}
现在,整个程序执行时有很多延迟,加载时间很长,有时会因为加载时间太长而导致脚本错误。如果我延长刷新间隔,情况会开始好转,延迟仍然存在,并且不会出现执行错误。我需要有一个很短的时间来做我需要的事情,但我无法找到一个有效的方法来做。对如何改进这一点有什么建议吗


另外,在使用刷新器的页面上停留一段时间后,浏览器会变得非常慢,以至于锁定…

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

$(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)
          }
  });
}
我将使用setTimeout来解决此问题:


这意味着它在执行新的ajax请求之前要等待5秒,而前一个请求可能需要多长时间。仍然需要等待5秒才能再次尝试。

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

由于ajax请求需要不确定的时间来完成,我建议您在第一个ajax请求完成时使用setTimeout等类似的方法触发下一个ajax请求,这样您就不会同时发出多个ajax请求,因此每个后续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();
});

我会将您的输出保存到PHP页面中的一个变量中,并且只在页面底部输出一次。另外,请不要在新代码中使用mysql_*函数。它们不再被维护,并且被正式弃用。那么,您是否已经开始调试,以查看总体执行时间滞后的地方?它在数据库查询中吗?它是用PHP生成输出的吗?是不是下载了那个输出?您实际发送了多少数据>?我已经做了一些调试,据我所知,加载0.82 KB的数据需要32秒…异步方法ftw。考虑到ECMAScript的异步性质,这将是正确的方法-问题的方法作者建议实现同步方法,这对互联网来说太陌生了。有趣的方法。我从来没有想过添加一个超时成功。这个答案在最初发布时是另一回事。然后,显然完全改变了其他两个答案所显示的内容。最好不要将字符串传递给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)
          }
  });
}
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();
});