2011-09-25 89 views
1

这是我的脚本。我希望缓存结果,但如果我的鼠标再次输入请求,它会一直发送请求的请求。为什么这个jQuery Ajax不会被缓存

$('.poplist li').mouseenter(function(){ 
    t=$(this).parent().attr("rel"); 
    i=$(this).attr("rel"); 
    $.ajax({ 
     url:"/j/place", 
     data:{"t":t,"tid":i}, 
     cache:true, 
     success:function(data){ 
      data= jQuery.parseJSON(data); 
      s=$('.left[rel='+t+']'); 
      s.find('.intro').html(data["intro"]); 
      s.find('.shop-avat img').attr("src","http://img.douban.com/u/plao/"+data['img']); 
     } 
    }) 
}) 
+0

似乎是正确为止。你真的有第二个请求吗?还是只是你的回调函数再次执行? 您是否console.log您的数据属性?如果它们不同,请求将不会被缓存。 –

+1

哪个请求没有被缓存?请求'/ j/place'或请求到'http://img.douban.com/u/plao/'+ data ['img']'? – Dancrumb

+0

另外,您是否确定*回复不是被缓存?Firebug将显示一个请求,即使它由本地缓存服务(相对于远程服务器) – Dancrumb

回答

1

jQuery.ajax的cache选项确实什么当设置为true和缓存完全留给了浏览器。但是,如果将其设置为false,则会将高速缓存清除时间戳添加到请求中。就这样。

更新: 一看就知道是这样,看看jQuery.ajax,版本1.6.4,线676,这里的源:https://github.com/jquery/jquery/blob/1.6.4/src/ajax.js#L676

0

一个简单的解决方案是,

您可以将结果保存在(data)一个变量,你可以在Ajax请求之前使用if功能。在鼠标输入时,如果变量没有存储数据,则触发ajax请求,否则返回false。