我正在構建一個應用程序,它是一個圖像庫,但有很多圖像(它用於瀏覽文檔的存檔);基本應用程序執行此:如何緩存一個jQuery的Ajax請求和解析
- 顯示的圖像
- 顯示「前一個」和左「下一個」的鏈路,所述第一圖像
的前一個和下鏈路的權利從一個XML檢索文件,按順序列出所有圖像;每組中有大約1000-2000幅圖像(每組一個XML文件)。爲了避免必須查找前後的同胞元素,我將每個前後圖像的名稱都包含爲每個圖像的屬性。
所以XML文件基本上是:
<list>
...
<image previous="ww.jpg" next="yy.jpg">xx.jpg</image>
<image previous="xx.jpg" next="zz.jpg">yy.jpg</image>
<image previous="yy.jpg" next="aa.jpg">zz.jpg</image>
...
</list>
我在做什麼是這樣的:
function display(img) {
var lookingfor = 'image:contains('+img+')';
$.ajax({
type: "GET",
url: "pns.xml",
dataType: "xml",
success: function(xml) {
$(xml).find(lookingfor).each(function(){
// display the actual image and the links from @previous and @next attributes
});
}
});
}
$(document).ready(function(){
var image = $.query.get('img');
display(image);
});
第一次加載頁面時,腳本:
- 得到要從url參數'img'顯示圖像的名稱
- 加載t他的XML文件從同一文件中包含的所有圖像
- 的名字被前面和後面的圖像名稱
- 顯示圖像
- 顯示鏈接到一個和下一個圖像
到目前爲止好。我的問題是與其他圖像。
鏈接到一個或下一個圖像是:
display('image_id');
我希望無需重新加載頁面,只需再次調用「顯示」功能,我就不會再獲得XML文件,不必再解析它。但是,似乎並非如此:每次新的「顯示」函數調用後,XML文件都會重新加載。
首次加載頁面時出現明顯延遲是可以接受的;但每張圖片的延遲時間似乎都很慢,而且很不愉快。
我完全可以控制應用程序;如果有一個比XML文件更有效的解決方案來保存參數,那很好。但是,應用程序必須脫機工作,所以我無法查詢服務器以獲取前/後圖像的名稱。
此外,使用:contains()選擇器可能不是最快的方法:什麼會更好?
編輯:使用XML並在外部加載它顯然遠非最佳;一個更好更簡單的方法是讓一個大對象包含每個圖像的一個數組並且只加載一次該對象(當腳本第一次加載時)。另一種方法是使用一些本地存儲/ SQL設施;我可以使用提供這些工具的Google Gears來嘗試。
這確實奏效,謝謝。 我在ajax調用中添加了'async:false',這樣第一次調用就等待xml在做任何顯示內容之前做好準備;如果不是,則當第一次調用display()時imgXML始終爲空(因爲xml未完成加載),因此不會顯示任何圖像和鏈接... – Bambax 2009-12-08 08:59:38