序列化POST请求jQuery / Javascript

时间:2010-02-26 19:02:38

标签: javascript jquery

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

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

4 个答案:

答案 0 :(得分:2)

不知道这在javascript中究竟是如何运作的,但你可以创建一个列表或数组,首先是先出列表类型,所以在准备就绪时你可以推送你的请求或创建你需要的任何值请求进入数组,设置间隔后从数组中取出并发送请求。基本上你会以这种方式排队。

答案 1 :(得分:0)

一种方法是包含与js一起发送的时间戳,在接收端,您可以将每个调用添加到队列,然后在执行之后执行按timestamp DESC排序。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您无法保证异步设置中的响应顺序。但是,你可以做的是

  1. 在请求和响应上添加序列号(或时间戳)。
  2. 收到每个回复后,将结果存储在序列号为
  3. 的全局商店中
  4. 运行一个单独的setInterval进程,以正确的顺序检查全局存储,处理结果并将其丢弃。
  5. 这将保证结果的序列化执行。但是需要注意超时或错误输出的请求,以免停止后续处理。