解決屢次異步請求紊亂問題 - JavaScript

加入目前的需求這樣的: 
      左邊的菜單連接,點擊後經過異步請求返回其HTML代碼,而後innerHTML到右面的DIV中,加入切換菜單的速度很是快,最終會致使請求紊亂。 
能夠加入消息管理機制,下面一個例子,代碼沒有優化,只提供思路。
​1. [代碼][JavaScript]代碼     
// 在DOMready的時候建立一個消息管理器messageMgr,包含一個隊列(Queue),增(Create)、刪(Remove)、判斷(isAvailable)函數。
//給每一個module設置一個Action,此Action必須有init,dispose方法,init方法先Create一個時間戳(Token),壓入Queue並返回給Action保持。異步請求的時候攜帶該Token,在callback函數執行以前判斷(isAvailable)此Token是否在Queue中,防止非正常的回調。ppt素材
//只有當該Action被銷燬(dispose)的時候刪除該Token,而後操做其餘的事件卸載(onBind).
  
var messageMgr = {
         __Queue: [],
         Create: function(){
              var __key = new Date().getMilliseconds();
              this.__Queue.push(__key);
              return __key;
         };
         Remove:   function (token) {
              token && baidu.array.remove(this.__Queue, token);
         },
         isAvailable:function (token) {
             return baidu.array.contains(this.__Queue, token);
         }
};
var asyn = function(url, data, opt){
         opt = opt || {};   
         //異步請求對象
         var __callBack = function(xhr, responseText){
                  if(opt.token && !messageMgr.isAvailable(opt.token)) return false;
                  opt.callback && opt.callback(xhr, responseText);
         };http://www.huiyi8.com/ppt/​
         baidu.ajax.request(url, {
                 method:   opt.method || "post",
                 data:     data,
                 onsuccess: __callBack,
                 timeout:  options.timeout || 600000,
                 onfailure:function () {
                         alert("網絡傳輸異常。");
                 }
         });
};
var blogCat = function(){
         var __token = null;
    
         var __asynRequest = function(){
                  var __callBack = function(list){
                   //渲染列表操做
                  }
                  var __data = {};
                  messageMgr.asyn("/remoteHC.php",  __data, {
                           token: __token,
                           callback : __callBack
                  });
         };
         var __init = function(){
                  //綁定事件其餘操做
                  __token = messageMgr.Create();
         };
         var __dispose: function(){
                  //出棧
                  messageMgr.Remove(__token);
         };
         return {
                  init: __init,
                  dispose: __dispose
         }
}();
php

相關文章
相關標籤/搜索