JavaScript:订单中的Ajax请求

时间:2012-07-24 02:11:28

标签: javascript ajax

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

无论如何确保服务器按照发送顺序接收 XML请求?

如果没有普通的Ajax,如果我通过一个WebSocket发送所有东西,我能得到这个保证吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我想到了几个选项:

  1. 通过在收到每个XML请求后等待服务器的成功响应(即排队)来同步发送它们。
  2. 如果您事先知道要发送的请求数,请将请求号作为标记发送给每个请求,例如: <requestNum>1</requestNum><numRequests>5</numRequests>。这并不保证他们收到的订单,但保证他们可以在之后按顺序退回,并且还有确保您拥有所有数据的额外好处。

答案 1 :(得分: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() - 将对象放入队列中 - 所以先进先出,就像你想要的那样。)

答案 2 :(得分:0)

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

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