JavaScript:Ajax请求顺序
我正在编写一些JavaScript/AJAX代码 是否仍有方法确保服务器按照XML请求的发送顺序接收它们 如果不是使用普通Ajax,那么如果我通过单个WebSocket发送所有内容,我是否可以得到这种保证JavaScript:Ajax请求顺序,javascript,ajax,Javascript,Ajax,我正在编写一些JavaScript/AJAX代码 是否仍有方法确保服务器按照XML请求的发送顺序接收它们 如果不是使用普通Ajax,那么如果我通过单个WebSocket发送所有内容,我是否可以得到这种保证 谢谢 在我的公司,我们使用这个小小的ajaxQueue插件,由jQuery的核心贡献者之一编写: 我想到了几个选项: 通过在接收到每个XML请求后等待服务器的成功响应(即创建队列),同步发送它们 如果您事先知道要发送的请求数量,请将请求编号作为每个请求的标记发送,例如15。这并不能保证它们的接
谢谢 在我的公司,我们使用这个小小的
ajaxQueue
插件,由jQuery的核心贡献者之一编写:
我想到了几个选项:
15
。这并不能保证它们的接收顺序,但可以保证它们可以在之后按顺序重新排列,并且还有一个额外的好处,那就是确保您拥有所有的数据如果以正确的顺序接收它们是非常重要的,并且向表单附加一个迭代id是不够的:
msg_number = 1; sendAJAX(msg_number); msg_number++;
然后我建议构建您自己的队列系统,并将每个后续文件作为前一个文件的回调发送。不要让每个元素都有自己的AJAX访问权限,而是在应用程序中创建一个集中的点来处理它 您的不同支持AJAX的部分甚至不需要知道它是一个队列:
AJAX.send({ url : "......", method : "post", success : func(){}, syncronous : true });
另一方面,你可以有这样的东西:
AJAX.send = function (obj) {
if (obj.synchronous) {
addToSyncQueue(obj); checkQueue();
} else { fireRequest(); }
};
在同步队列中,只需围绕旧回调包装一个新函数:
callback = (function (old_cb) {
return function (response) {
checkQueue();
old_cb(response);
};
}(obj.success));
obj.success = callback;
AJAX.call(obj);
在checkQueue
中,您只需查看它是否为空,如果不是,请使用nextObj=queue.shift()
(如果您正在.push()
-将对象推到队列上,那么先进先出,就像您想要的那样)。为什么需要按顺序使用它们?为什么不一个接一个地发送它们呢?这些AJAX请求由不同的UI元素触发。我只需要接收订单与发送订单相同。除了WebSocket之外,据我所知,它们几乎都是TCP套接字,所以是的,到货订单得到了保证(至少看起来是这样),而不是这样。每个ajax请求可能是不同的TCP连接(取决于浏览器和服务器实现)。所以不能保证一个请求会在另一个请求之前到达。很抱歉,没有看到您关于UI元素的评论。在这种情况下,选项#2听起来不是最好的选择,所以最好的选择是使用队列。您可以将请求存储在一个数组中,或者使用一个Javascript框架来实现。无论如何,框架将使Ajax请求更容易处理!第二种方法仍然有效,除非单个页面将生成数十亿个请求,否则您只需不断增加计数。