CakePhp 是否将时间戳添加到 ajax 请求的我的 javascript 文件中?

Is CakePhp adding timestamp to my javascript files requested by ajax?

我正在使用 Pjax 获取我的 cakePhp 网站上的页面。由于 javascript 被再次获取,我收到错误消息,因为它认为它是一个新文件,因为 .js?_=timestamp 被添加到它。

main.min.js?_=1425763395728

如果 ajax 正在请求一个页面,cakePhp 会添加这个吗?我想不出它返回时带有时间戳的任何其他原因。

我正在使用 CakePhp 2.5

更新:

问题是 jQuery,这有助于删除时间戳。

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) {
      options.cache = true;
  }
});

我假设您的 Asset.timestamp 配置变量设置为 'force'true。将此设置为 false 将从您的资产中删除查询字符串时间戳。这在书中有记载:http://book.cakephp.org/2.0/en/development/configuration.html

唯一的缺点是浏览器可能会缓存您的 JavaScript 和 CSS 文件,并且如果您更新它们可能会使用过时的资产。

编辑

因为这对 OP 没有帮助,所以 CakePHP 可能没有添加时间戳。我会查看您正在使用的第 3 方库,特别是在 JavaScript 中,但可能在任何 CakePHP 插件或 PHP 库中,看看它们是否可以添加查询字符串。

结束编辑

尽管 OP post 编辑了解决方案,但最终勾选的答案并未提供解决方案 - 该问题与 CakePHP 中的 Asset.timestamp 无关,而是默认的 jquery ajax 行为,可以通过在调用 ajax 请求之前放置以下代码片段来调整(正如 OP 已经说明的那样):

//Cache Ajax request script files
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) {
      options.cache = true;
  }
});

//Cache all Ajax request related files
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
      options.cache = true;
});

我花了一些时间才弄明白这个问题 post,所以希望这篇文章能帮助其他人更快地找到答案。谢谢基思!