2011-09-21 56 views
1

我有一個圖片的網格(3x3,並排放置在a中)。我需要經常更新這個網格。由於每個畫面獨立於其餘的(他們從不同的位置搶到),我選擇通過自己的Ajax回調來加載每一個畫面,就像這樣:Ajax:同時加載多個圖像

for (var i=0; i < numPictures; i++) { 
    Dajaxice.loadPicture(callback_loadPicture, {'picture_id':i}) 
} 

功能callback_loadPicture()把圖片到其適當的位置在裏面 。

問題是:即使某些圖片會比其他圖片更快完成加載,瀏覽器將不會顯示任何內容,直到最後一次ajax調用完成。由於某些電話會超時,這意味着在單張照片​​超時之前我什麼也看不到。

這在每個瀏覽器中的表現都略有不同:有時圖片會顯示回調完成(但通常不會),有時瀏覽器會顯示一些圖像,但推遲顯示所有圖像直到最後一個加載完成。

我使用:

  • 的Django 1.3(Python 2.7版)
  • 窗口64的(測試)服務器
  • dajaxice爲Ajax實現

我願意接受改變結構我的代碼。

任何意見或建議,將不勝感激。

+1

所以你在開發中看到了這種行爲,大概在使用runserver管理命令的時候呢? Django開發Web服務器是單線程的:它一次只能處理一個請求。因此,與生產Web服務器不同,每個AJAX調用都是阻塞的。 –

回答

1

由於ajax調用被阻塞,如chrisdpratt所說,如果您確實需要同時顯示圖像,我會建議某種預加載圖像的3x3網格,並在代碼需要時顯示它們。

考慮到這一點,您可以運行$(document).ready()上已有的代碼,但會隱藏圖像(即display:none)。稍後需要時,您只需更改需要顯示的圖像的顯示屬性。

1

如果您看到的問題確實是由Django開發服務器的單線程實現引起的,那麼您可以嘗試django-devserver(https://github.com/dcramer/django-devserver)。在其他改進中,它擁有:

「改進的runserver允許您同時處理請求。」

其他的改進也使它值得!