0

我正在编写一些 JavaScript/AJAX 代码。

有没有办法确保服务器按照发送顺序接收XML 请求?

如果不是使用普通的 Ajax,如果我通过单个 WebSocket 发送所有内容,我能得到这个保证吗?

谢谢!

4

3 回答 3

1

如果以正确的顺序接收它们至关重要,并且将迭代 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()对象放入队列中 - 所以先进先出,就像您想要的那样)。

于 2012-07-24T02:44:33.043 回答
1

我想到了几个选项:

  1. 同步发送它们,方法是在接收到每个 XML 请求后等待来自服务器的成功响应(即创建一个队列)。
  2. 如果您事先知道要发送的请求数,请将请求号作为每个请求的标签发送,例如<requestNum>1</requestNum><numRequests>5</numRequests>. 这并不能保证它们被接收的顺序,但保证它们可以在之后按顺序放回,并且具有确保您拥有所有数据的额外好处。
于 2012-07-24T02:19:55.537 回答
0

在我的公司,我们使用这个ajaxQueue由 jQuery 核心贡献者之一编写的小插件:

http://gnarf.net/2011/06/21/jquery-ajaxqueue/

于 2012-07-24T02:15:52.443 回答