如何在jquery中连续调用Ajax请求,直到我们收到响应

How to call Ajax request continuously in jquery until we receive the response

提问人:Gurudas k s 提问时间:6/29/2022 最后编辑:Gurudas k s 更新时间:6/30/2022 访问量:227

问:

我的服务中发生了一个ajax调用,需要更多时间来满足请求。但最后,如果我检查日志,这个请求会在 2 分钟内成功。

现在的问题是现代浏览器等待此请求的时间不会超过 1 分钟。如果请求未在一分钟内完成,则失败并显示 HTTP 错误 504。

使用下面的代码,我正在尝试连续调用ajax调用。但这每次都会创建一个新请求。我的要求是我应该连续调用这个 ajax 请求,直到我得到它的响应。同样使用下面的代码,它总是调用 ajax 请求。不知道如何阻止它。

function fetchdata(){
 $.ajax({
  url: 'fetch_details.php',
  type: 'post',
  success: function(data){
   // Perform operation on return value
   alert(data);
  },
  complete:function(data){
   setTimeout(fetchdata,5000);
  }
 });
}

$(document).ready(function(){
 setTimeout(fetchdata,5000);
});
jQuery AJAX 回调 setTimeout

评论

0赞 Twisty 6/30/2022
欢迎使用 Stack Overflow。我怀疑你会想调查为什么你的服务器需要 2 分钟来响应请求。如果请求是针对数据的,而服务器需要 2 分钟才能生成记录集,则可能是一次请求的数据过多。

答:

0赞 Rantouan Achmet 6/30/2022 #1

从我的角度来看,如果请求花费的时间超过平均时间,您无法控制客户端何时丢弃请求,因为不知道中间有什么(防火墙也会切断此类请求)。

不过,如果您的服务器端脚本正在处理复杂的数据并且您需要几分钟,那么明智的做法是适应新标准并发出 3 种类型的请求:

  1. 一个用于调用处理数据的脚本,
  2. 一个每 X 秒询问一次数据是否被处理,并且
  3. 一旦数据被处理,它就会停止检查循环并获取结果