簡體   English   中英

JavaScript:訂單中的Ajax請求

[英]JavaScript: Ajax Requests in Order

我正在寫一些JavaScript / AJAX代碼。

反正是否確保服務器按照發送順序接收 XML請求?

如果沒有普通的Ajax,如果我通過一個WebSocket發送所有東西,我能得到這個保證嗎?

謝謝!

我想到了幾個選項:

  1. 通過在收到每個XML請求(即建立隊列)后等待服務器的成功響應來同步發送它們。
  2. 如果您事先知道要發送的請求數,請將請求號作為標記發送給每個請求,例如<requestNum>1</requestNum><numRequests>5</numRequests> 這並不能保證收到它們的順序,但保證它們可以在之后按順序放回,並且具有確保您擁有所有數據的額外好處。

如果以正確的順序接收它們是至關重要的,並且將迭代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() - 將對象放到隊列中 - 所以先進先出,就像你想要的那樣。

在我的公司,我們使用這個小的ajaxQueue插件,由一個核心jQuery貢獻者編寫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM