2012-06-17 53 views
1

我有以下代碼:jQuery的等待阿賈克斯好象叫

var table = new Array(); 
function getTableData(year) { 
    if (!table.hasOwnProperty(year)) { 
     $.ajax({ 
      ... 
      success: function(data) { 
       table[year] = data; 
      } 
     }); 
    } 
} 

所以,我想那是什麼功能做的基本上是檢查,如果我叫的是Ajax的請求之前,如果我有,別再次調用它,但返回以前加載的數據。

這工作就像一個魅力。什麼不工作是這樣的:

function showTable(year) { 
    $('#loadingAnimation').show(); 
    $('#tableDiv').ajaxComplete(function() { 
     // insert data into table 
    } 
    $('#loadingAnimation').hide(); 
} 

只要數據沒有被(即表【同期】尚不存在),在Ajax的請求進行的,當它完成了數據插入前裝進入桌子,一切都很好。但是當表[year]確實存在時,我的函數沒有什麼可以等待,並且我得到一個空白表格加上加載動畫。

我之前嘗試過的是將ajax-request設置爲同步,並且不要讓我的函數調用「ajaxComplete」,然後每個作品都可以,但我根本沒有加載動畫,屏幕在等待期間被凍結。

任何想法如何讓我的腳本工作? 在此先感謝:)

+0

'無功表=陣列();'必須'無功表= [];'或'無功表=新的Array( );'。然而,我認爲你的情況你想要一個對象,即'= {}'或'= new Object()' – ThiefMaster

+0

謝謝,這是我的文章中的一個錯字。爲什麼我需要一個對象而不是數組?這只是一個字符串?...... – Springsteen

+0

除非'year'是從0..n的值,否則數組並不是真正的最佳選擇。 some_array [2012] = ...;將創建'undefined'值爲'0..2011'的元素。 – ThiefMaster

回答

0

是否有任何理由showTable()是一個單獨的功能?如在一個單獨的按鈕來刷新表數據初始加載後?

否則,你會更好直接添加加載動畫到您的工作像這樣的代碼:

if (!table.hasOwnProperty(year)) { 
    $('#loadingAnimation').show(); //start querying for data, display the icon 
    $.ajax({ 
     ... 
     success: function(data) { 
      $('#loadingAnimation').hide(); //data found, hide icon 
      table[year] = data; 
     } 
    }); 
} 
+0

是一樣的,我的頁面上有箭頭按鈕,點擊時,以下一個(或前一個)年份作爲參數調用'showTable(year)'。所以我需要有一個獨立的功能。 – Springsteen

0

你可以通過設置多一個變量來存儲上表【同期】試試。因此,在接下來的所有通話中,您在做其他事情之前都要檢查它。 例如。像 -

// An example from a dynamic AJAX gallery I had built   
var 
// ..., 
prepareMarkup, 
loadResults, 
resultsCache = {}, 
// ... 
; 

loadResults = function(req, category, tracker) { 
// I am calling loadResults on every click (navigation in ur case) 
// to load galleries 
// thus, tracker is different for each link 

if (req && req !== "") { 
    // I am using a tracker by setting to a link, 
    // which keeps track of those that users have already clicked 
    // at least once 
    if (typeof resultsCache[tracker] === "object" 
     && resultsCache[tracker].lookbookResults.length > 0) { 
     // Load from cache instead 
     buildLookbook(resultsCache[tracker], category); 
     return; 
    } 


    $.ajax({ 
     type: "GET", 
     url: "/bin/content/lookbook", 
     data: "lookbook-feed=" + req + "&siteName=" + APP.Site.siteRoot, 
     dataType: "json", 
     success: function(response) { 
      // Set cache 
      resultsCache[tracker] = response; 

      // Go ahead to build UI 
      buildLookbook(response, category); 
     }, 

//... 

希望這就是你要找的