2011-09-16 77 views
2

我有一個基於Zend框架的web應用程序除了主頁面請求之外,還向服務器生成3個獨立的AJAX請求。這對Web服務器造成了顯着的性能影響。合併jQuery AJAX請求Zend框架

我想嘗試通過將所有3個AJAX請求合併成一個請求,這個請求可以被我的Zend Framework應用程序接收並由動作堆棧作爲3個獨立請求處理。

歡迎任何有關工具/技術和陷阱的建議。

回答

2

從我的頭頂:

  • 建立一個請求棧或隊列(JS陣列)
  • 發送請求以請求堆代替發射了Ajax請求
  • 的發送包含AJAX請求請求堆疊陣列
  • 循環通過陣列服務器側,並按照指示

這將是somethi像一個微型作業堆棧/隊列的Ajax請求。

+0

我正在使用Zend Framework視圖助手來保持預期的AJAX請求的數量的計數。以前在jQuery中調用$ .GET或$ .POST的代碼時,我現在調用我自己的jQuery插件,它將每個請求保存在堆棧中(js數組)。一旦堆棧中的請求數量與視圖幫助程序中指定的數量相匹配,我就向我的Zend Framework Ajax控制器發出一個請求,它會依次解析每個請求。現在的問題是,這些AJAX調用中有幾個需要將數據發送回去。將匹配數據傳遞給相關請求的最佳方式是什麼? – Richard

+0

同樣,您應該將它們發送回捆綁並標記在數組中,然後您的插件將對數組進行排序並進一步發送響應。你的插件基本上就像請求路由器一樣工作。因此,每次發送給插件的請求都會得到一個ID,在大響應數組中,您可以通過ID找到子響應,並根據需要進行處理。 – markus

0

我接受了Markus的建議並創建了2個jQuery插件,一個用於排隊請求,另一個用於發佈它們。

Zend Framework應用程序接收請求並遍歷每個請求,並將任何返回數據添加到通用響應對象,該對象被JSON編碼並返回給客戶端。

var count = 0; 
var requests = new Array(); 

// Add AJAX requests to the queue 
(function($){$.fn.addAjaxRequest=function(callback, ajaxArgs, initialArgs) { 
     requests[count] = [callback, ajaxArgs, initialArgs]; 
     count++; 
    } 
}) 
(jQuery); 

// Send the queued AJAX requests to MVC 
(function($){$.fn.postAjaxRequests=function(host) { 
     var response = null; 
     var url = 'http://' + host + '/ajax/process-ajax-requests'; 
     $.ajax({ 
      type: 'POST', 
      url: url, 
      dataType: 'json', 
      async: false, 
      data : ({data : requests}), 
      success: function(data) { 
       response = data; 
      } 
     }); 
     return response; 
    } 
}) 
(jQuery);