Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化POST请求jQuery/Javascript_Javascript_Jquery - Fatal编程技术网

序列化POST请求jQuery/Javascript

序列化POST请求jQuery/Javascript,javascript,jquery,Javascript,Jquery,我正在开发一个应用程序,它每1500毫秒发送一个AJAX POST请求(我目前正在使用jQuery)。我注意到,大多数情况下,这些请求在350-450毫秒内成功,并以与生成请求相同的顺序发送到服务器 但是,有时,一个或两个请求需要将近3-4秒,并且会在稍后发送。在我的应用程序中,我需要确保服务器接收这些请求的顺序与从客户端发送的顺序相同。我该怎么做?我目前使用setInterval 1500毫秒来调用函数(生成要发布的数据)并使用$.ajax()发布它。但是,我如何序列化请求?不知道在javas

我正在开发一个应用程序,它每1500毫秒发送一个AJAX POST请求(我目前正在使用jQuery)。我注意到,大多数情况下,这些请求在350-450毫秒内成功,并以与生成请求相同的顺序发送到服务器


但是,有时,一个或两个请求需要将近3-4秒,并且会在稍后发送。在我的应用程序中,我需要确保服务器接收这些请求的顺序与从客户端发送的顺序相同。我该怎么做?我目前使用setInterval 1500毫秒来调用函数(生成要发布的数据)并使用$.ajax()发布它。但是,我如何序列化请求?

不知道在javascript中如何实现,但您可以创建一个请求列表或数组,即先进先出类型的列表,因此当准备就绪时,您可以将请求或创建请求所需的任何值推送到数组中,设置好间隔后,从数组中提取并发送请求。基本上,您将以这种方式对请求进行排队。

一种方法是包括一个随js发送的时间戳,在接收端,您可以将每个调用添加到队列中,然后在通过
时间戳DESC
排序后执行


如果您提供有关实际发生情况的更多信息,可能您可以根据哪种类型的请求调整间隔(例如,预期响应时间有多长?

以下内容将等待服务器响应,然后启动1500ms计时器启动下一个请求

$(function() {
  var recursive = arguments.callee;
  $.post("http://url", { /* data */ }, function() {
    setTimeout(recursive, 1500);
  });
});

在异步设置中,您无法保证响应的顺序。然而,你能做的是

  • 在请求和响应上添加序列号(或时间戳)
  • 收到每个响应后,将结果存储在全局存储中,并将序列号作为密钥
  • 运行单独的setInterval进程,以正确的顺序检查全局存储,处理结果并将其清除

  • 这将保证结果的序列化执行。但是需要注意超时或出错的请求,以避免延迟后续处理。

    这将是一个很好的解决方案。请记住,在失败和成功的ajax请求上都要继续排队。我看不出这与他现在所做的有什么不同。是的,基本上我不关心要排序的数据的生成—我以正确的顺序发送它们—但有些请求需要更长的时间,而其他请求在它们之后发送,在它们之前成功。