【问题标题】:Strange underscore param in remote links远程链接中奇怪的下划线参数
【发布时间】:2011-07-18 08:38:30
【问题描述】:

我使用 Rails3、JQuery 和 will_paginate gem 来制作远程分页链接。已知的解决方案是:

$('.pagination a').live('click',function (){
  $.getScript(this.href);
  return false;
});

使用此代码,我得到如下链接:http://localhost:3000/products?_=1300468875819&page=1http://localhost:3000/products?_=1300468887024&page=2。所以小问题是:这个奇怪的参数_=1300468887024 是什么(看起来像Unix-time)。它的目的是什么?据我所知,这可能会导致搜索爬虫出现一些问题。

UPD:解决方案描述为here

【问题讨论】:

标签: ruby-on-rails ajax parameters


【解决方案1】:

这是一个cache buster。它也用于开发模式,以避免从浏览器缓存中获取旧请求。

(不幸的是,我找到的所有解释都与广告有关:S)

【讨论】:

  • 它应该出现在生产中吗(我也看到它在那里)?我应该如何删除它?
  • 我搜索了一段时间,但找不到删除时间戳的方法:S。也许值得进入 will_paginate 的源代码并检查时间戳添加到链接的位置。我读到有些人缓存了整个渲染区域,这意味着他们向用户返回相同的“链接”,因此可以缓存 url。
  • 我有非常相似的项目(相同的 Rails、gem、渲染方法)没有这些东西。问题是我看不出区别。
【解决方案2】:

如果您不介意为所有请求删除它,这是一个简单的解决方案:

jQuery.ajaxSetup({ cache: true });

【讨论】:

    【解决方案3】:

    另一种解决方案是按照the documentation 扩展jQuery 的getScript 函数:

    jQuery.cachedScript = function(url, options) {
      options = $.extend(options || {}, {
        dataType: "script",
        cache: true,
        url: url
      });
      return jQuery.ajax(options);
    };
    

    这样,只有使用这种新方法的 ajax 调用才会使用缓存。另一方面,如果您使用 ajaxSetup 方法,则默认情况下所有 ajax 调用都会缓存,因为 ajaxSetup 会全局设置缓存属性。

    现在您可以使用$.cachedScript(location.href); 代替$.getScript(this.href);

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2012-04-26
      • 2011-08-24
      • 2014-03-25
      • 1970-01-01
      • 2013-04-28
      • 2010-10-28
      相关资源
      最近更新 更多