2010-06-13 61 views
1

我很困惑。我試圖通過循環訪問數組並調用我編寫的方法addModule()來將門戶附加到頁面。該方法按照正確的順序被調用正確的次數(通過alert語句進行檢查),但實際上只有一個或兩個門戶被填充。我有一種感覺,它與環和異步的東西,但它更容易與代碼解釋:問題與異步jQuery和循環

moduleList = [['weather','test'],['test']];

for(i in moduleList) { $('#content').append(''); for(j in moduleList[i]) { addModule(i,moduleList[i][j]); //column,name } }

function addModule(column,name) { alert('adding module ' + name); $.get('/modules/' + name.replace(' ','-') + '.php',function(data){ $('#'+column).append(data); }); }

主陣列中的每個陣列,我追加一個新列,因爲這正是每個子陣列是 - 一列門戶網站。然後我遍歷該子數組,並在該列上調用addModule以及該模塊的名稱(該模塊可正常工作)。在我的addModule方法中發生了一些錯誤,它只添加第一個和最後一個模塊,或者有時候是中間模塊,有時甚至沒有模塊......我很困惑!

+0

不知道這是否有助於解決問題,但ID不應以數字開頭。只有一封信。 – user113716 2010-06-13 14:47:41

+0

我的理解是,你沒有得到你的一些請求的迴應。問題是你沒有得到他們的順序? – user113716 2010-06-13 15:15:09

+0

如果問題僅僅是正確的順序,那麼我會建議你的'addModule()'函數爲它所做的每個'.get()'請求在適當的列中創建一個枚舉的''容器。然後當收到響應時,將結果追加到適當的「span」編號。我會看看我是否可以更新我的例子。 – user113716 2010-06-13 15:29:56

回答

1

你確定這不是一個問題與您的PHP?

它適用於我(使用替代http請求)。

測試在這裏:http://jsfiddle.net/kkxBH/1/(更新)

當然,追加到同一列的項目可能不會追加在相同的順序,他們被送往。而是按照收到回覆的順序。不一定是一樣的。

編輯:更新以確保正確的順序。

moduleList = [['weather','test'],['test'],['some','other']]; 

request = ['http://www.microsoft.com', 
      'http://www.apple.com', 
      'http://www.google.com']; 


for(i in moduleList) { 
    for(j in moduleList[i]) { 
     addModule(i,moduleList[i][j], j); //column,name, j index 
    } 
} 

    // Receive "j" from inner for() loop 
function addModule(column,name, j) { 

     // Reference the column 
    var $column = $('#'+column); 

     // Append a new <span> tag to the column that has 
     // the value of "j" as the class name 
    $('<span/>',{ className:j }).appendTo($column); 

    $.get(request[column],function() { 
      // Append the result to the proper span in the proper column. 
      // (Of course, you'll be appending your data returned.) 
     $column.find('span.' + j).append(name); 
    }); 
}​ 
0

@patrick,感謝您的建議,但這並不能解決問題。它與異步調用有關,因爲如果我使用基元$ .ajax而不是$ .get來設置異步,我會按照正確的順序獲取我的門戶。但使用同步是非常糟糕,非常緩慢,加上模塊本身依賴於內部的異步代碼...

+0

(對不起,這是回覆您評論的唯一方式) – sethvargo 2010-06-13 15:10:44

+0

@Seth - 請使用您的答案下的評論功能爲對話。謝謝。 :o) – user113716 2010-06-13 15:11:47

+0

@Seth - 這是因爲您正在使用不同的用戶名。如果您使用原始帳戶登錄,則至少應該能夠對您的問題發表評論。 http://stackoverflow.com/users/365546/seth-vargo – user113716 2010-06-13 15:12:41