rails ajax URL更改

mon*_*guy 12 ajax jquery html5 ruby-on-rails

我有下一个问题,我有一个用ajax打开的页面,并像这样动态更改浏览器的URL

window.history.pushState(null, null, "/desktop/manage/add");
Run Code Online (Sandbox Code Playgroud)

因此,当我在"添加"页面并打开任何带有get/post请求的页面(甚至是另一个网站)并在浏览器中按"返回"按钮时,我得到的不是页面的完整html代码,而只是ajax部分.像这样:PIC

如何解决这个问题?

PS如果我删除window.history.pushState(null,null,"/ desktop/manage/add"); 一切正常,但我需要更改浏览器的URL.

UPD:我通过邮寄请求打开这个页面,没有ajax 在此输入图像描述

然后我通过AJAX打开"管理/添加"页面 在此输入图像描述

然后转到google.com(任何网站)并点击后退按钮 在此输入图像描述

而我的ajax加载页面不是完整的HTML页面,只有像文本一样的ajax部分: 在此输入图像描述

我读到了这个问题,并且通常是rails程序员将事件添加到后面点击按钮到application.js,如下所示:

$(window).on('popstate', function () {
    $.get(document.location.href)
  });
Run Code Online (Sandbox Code Playgroud)

但这只适用于用户不去谷歌(或任何其他网站),它只有当他们通过我的网站并点击后退按钮时才有效.

UPD2: /添加控制器

def addProduct

@categories = Market.where("depth = ? and title != ''", 0).reorder(:title);
        @tags = UserTag.where(user_id: current_user.id).includes(:tags);
        respond_to do |format|
            format.html{render layout: "desktop_layout"}
            format.js {}
        end
    end
Run Code Online (Sandbox Code Playgroud)

这是我的addProduct.js :(在点击后退按钮后在屏幕截图中看到的这个渲染文件)

window.history.pushState('page212', 'Mikee.kz', '/desktop/manage/add');
    $("#rightBlock").html("<%= escape_javascript(ajax_section id:'page', :render => 'myadd') %>");
Run Code Online (Sandbox Code Playgroud)

Rya*_*n K 3

不久前我也遇到了同样的问题,但是相反replaceState()。我一开始没有注意到这一点,但我的开发同事引起了我的注意。事实证明,我没有注意到它,因为我使用的是 Firefox,而这似乎是他使用的 Chrome/Chromium 独有的错误。事实上,这个bug似乎已经有一段时间了,但谷歌还没有修复它。

话虽如此,似乎还没有真正的解决方案,至少在谷歌修复它之前是这样。当然,只需重新加载页面即可暂时解决问题,但您仍然会看到丑陋的代码。您可以不使用 Chrome/Chromium,但这也不是一个解决方案。