首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何缓存jquery Ajax请求和解析

如何缓存jquery Ajax请求和解析
EN

Stack Overflow用户
提问于 2009-12-08 01:14:00
回答 4查看 1.8K关注 0票数 0

我正在构建一个应用程序,它是一个图片库,但是有很多图像(用于浏览文档档案);基本上,应用程序这样做:

  1. 显示图像
  2. ,显示第一个图像

的“先前”和“下一步”链接。

前面和下一个链接是从一个XML文件中检索的,该文件按顺序列出了所有图像;每组中大约有1000-2000个图像(每组一个XML文件)。为了避免查找前面和后面的同级元素,我将每个先前和下一个图像的名称作为每个图像的属性。

因此,XML文件基本上是:

代码语言:javascript
运行
复制
<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>

我要做的是:

代码语言:javascript
运行
复制
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);
  });

第一次加载页面时,脚本:

file

  • displays

  • 从url参数‘img’

  • 中获取要显示的图像的名称,加载包含所有图像名称的xml文件,

  • 从这个相同的图像获取前一个和下一个图像名,image

  • displays链接到上一个和下一个图像

到目前一切尚好。我的问题是其他的图像。

指向上一个或下一个图像的链接是:

代码语言:javascript
运行
复制
 display('image_id');

我希望,如果不重新加载页面,只需再次调用“display”函数,我就不必再次获得XML文件,也不必再解析它。但是,情况似乎并非如此: XML文件显然再次加载了“display”函数的每一个新调用。

第一次加载页面时出现明显的延迟是可以接受的;但是对于每个图像来说,相同的延迟似乎是缓慢的,而且非常令人不快。

我完全控制应用程序;如果有一个比XML文件更有效的解决方案来保存参数,那就很好了。但是,应用程序必须脱机工作,因此我无法查询服务器以获取前面/下面的图像的名称。

此外,使用: would ()选择器可能不是最快的方法:有什么更好?

编辑:使用XML并将其加载到外部显然不是最佳方法;一个更好、更简单的方法是让一个大对象包含每个图像的一个数组,并且只加载这个对象一次(当脚本第一次加载时)。另一种方法是使用一些本地存储/ SQL工具;我可以在提供此类工具的Google中进行尝试。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-08 01:38:12

也许是第一次将图像XML转换为全局JS变量,然后在随后的调用中查询JS变量。所以:

代码语言:javascript
运行
复制
<script type="text/javascript">
  var imgXML = null;

  // document ready
  $(function() { 
    $.ajax({
      type: "GET",
      url: "pns.xml",
      dataType: "xml",
      success: function(xml) {
        imgXML = xml;
        var image = $.query.get('img');
        display(image);
      }
    });
  }      

  // subsequent display goes straight to the XML data in memory
  function display(img) {
    if(imgXML != null) {
      var lookingfor = 'image:contains('+img+')';
      $(imgXML).find(lookingfor).each(function(){
        // display image and links
      }
    }   
  }
</script>

我确信还需要进行其他优化,但这应该可以解决重新加载XML的问题。

票数 3
EN

Stack Overflow用户

发布于 2009-12-08 01:45:18

cache设置为true如何?

代码语言:javascript
运行
复制
$.ajaxSetup({
  cache: true
});
票数 0
EN

Stack Overflow用户

发布于 2009-12-08 01:48:57

一种方法是在获取第一个图像之前(与图像获取函数分开)获取xml文件,并读取数组中的所有图像名称(尽管它将是一个大数组)。

代码语言:javascript
运行
复制
//pseduo code
<script type="text/javascript">
    var currentImage=-1;
    var imageName=new Array();

    loadXML(){
        GETXML;
        var i=0;
        for(image in images_in_xml){
            imageName.push(image);
            if(image == CURRENT_IMAGE_NAME)
               currentImage = i;
            i++;
        }            
    }
</script>

现在有了当前图像的索引,只需使用currentImage-1currentImage+1就可以很容易地获得下一个和以前的图像的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1863948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档