我正在构建一个应用程序,它是一个图像库,但有很多图像(它用于浏览文档的存档);基本应用程序执行此:如何缓存一个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