Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails中的JQuery分页导致渲染失败_Jquery_Ruby On Rails_Jquery Pagination - Fatal编程技术网

Rails中的JQuery分页导致渲染失败

Rails中的JQuery分页导致渲染失败,jquery,ruby-on-rails,jquery-pagination,Jquery,Ruby On Rails,Jquery Pagination,我正在使用JQuery在我的rails应用程序中实现分页,遇到了一个问题:当我在浏览器中回击时,rails有时无法呈现页面内容,而是将原始Javascript转储到浏览器窗口中。下面让我们快速了解一下我正在使用的功能: pagination.js: if (history && history.pushState) { $(function () { $('.pagination a').live("click", function () { $.ajax

我正在使用JQuery在我的rails应用程序中实现分页,遇到了一个问题:当我在浏览器中回击时,rails有时无法呈现页面内容,而是将原始Javascript转储到浏览器窗口中。下面让我们快速了解一下我正在使用的功能:

pagination.js:

if (history && history.pushState) {
  $(function () {
    $('.pagination a').live("click", function () {
      $.ajax({url: this.href, dataType: "script", cache: true});
      history.pushState(null, document.title, this.href);
      $("html, body").animate({ scrollTop: 0 }, 300);
      return false;
    });

    $(window).bind("popstate", function() {
      $.ajax({url: location.href, dataType: "script", cache: true});
    });
  });
}
在我看来,index.js.erb:

$("#products").html("<%= escape_javascript(render("products")) %>");
$(“#产品”).html(“”);
它在某些时候起作用,但通常在按下后退按钮时,JS会被转储到我的浏览器窗口中,而不会被计算/渲染。它看起来像这样(在我的浏览器中):

$(“#产品”).html(“\n\n\n产品

…等等。我不确定到底是什么失败了。有什么想法吗?

您的浏览器请求的路径如下所示

  • /产品
  • /产品?第页=1
  • /产品?第页=2
根据/products?page=2是“手动”浏览还是通过ajax浏览,您可以呈现js版本还是普通版本。单击“上一步”按钮时,您可能只会获得浏览器缓存中的内容,这可能是这两个版本中的任何一个,具体取决于您以前的导航历史记录

为了使其正常工作,您希望浏览器维护两个不同版本的缓存。一种方法是在发出ajax请求时添加一个额外的参数:

$('.pagination a').live("click", function () {
  $.ajax({url: this.href, dataType: "script", cache: true, data: {'ajax_paginate': true});
  ...
});
jquery pjax已经做到了这一点,如果您使用pjax rails插件,神奇的缓存分离参数将自动为您剥离


在尝试此操作之前,您需要清空浏览器缓存-缓存中可能已经有一堆坏数据。

请为我们提供有关此渲染功能以及浏览器显示内容的更多信息。我的浏览器的内容与上面的最后一个代码块类似,而Javascript和HTML则显示在我的浏览器中escape_javascript和render是rails框架的一部分。顺便说一句,你为什么不使用jquery pjax?我还没有尝试过jquery pjax,不过我会的。不过你关于添加ajax_paginate的建议很有效。谢谢。
$('.pagination a').live("click", function () {
  $.ajax({url: this.href, dataType: "script", cache: true, data: {'ajax_paginate': true});
  ...
});