Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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
JavaScript:Ajax请求顺序_Javascript_Ajax - Fatal编程技术网

JavaScript:Ajax请求顺序

JavaScript:Ajax请求顺序,javascript,ajax,Javascript,Ajax,我正在编写一些JavaScript/AJAX代码 是否仍有方法确保服务器按照XML请求的发送顺序接收它们 如果不是使用普通Ajax,那么如果我通过单个WebSocket发送所有内容,我是否可以得到这种保证 谢谢 在我的公司,我们使用这个小小的ajaxQueue插件,由jQuery的核心贡献者之一编写: 我想到了几个选项: 通过在接收到每个XML请求后等待服务器的成功响应(即创建队列),同步发送它们 如果您事先知道要发送的请求数量,请将请求编号作为每个请求的标记发送,例如15。这并不能保证它们的接

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

是否仍有方法确保服务器按照XML请求的发送顺序接收它们

如果不是使用普通Ajax,那么如果我通过单个WebSocket发送所有内容,我是否可以得到这种保证


谢谢

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


我想到了几个选项:

  • 通过在接收到每个XML请求后等待服务器的成功响应(即创建队列),同步发送它们
  • 如果您事先知道要发送的请求数量,请将请求编号作为每个请求的标记发送,例如
    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请求更容易处理!第二种方法仍然有效,除非单个页面将生成数十亿个请求,否则您只需不断增加计数。