rails ajax URL更改

Posted

技术标签:

【中文标题】rails ajax URL更改【英文标题】:rails ajax URL change 【发布时间】:2015-10-10 17:24:51 【问题描述】:

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

window.history.pushState(null, null, "/desktop/manage/add");

所以当我在“添加”页面并打开任何带有获取/发布请求的页面(甚至是另一个网站)并在浏览器中按下“返回”按钮时,我得到的不是页面的完整 html 代码,而是只有 ajax 部分.像这样:

如何解决这个问题?

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

更新: 我通过发布请求打开此页面,没有 ajax

然后我通过 AJAX 打开“管理/添加”页面

然后转到 google.com(任何网站)并单击返回按钮

而且我的 ajax 加载页面不是完整的 HTML 页面,只有 ajax 部分,如文本:

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

$(window).on('popstate', function () 
    $.get(document.location.href)
  );

但这只有在用户不去谷歌(或任何其他网站)时才有效,只有当他们浏览我的网站并点击后退按钮时才有效。

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.htmlrender layout: "desktop_layout"
            format.js 
        end
    end

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

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

【问题讨论】:

当您在页面之间切换时,您能否编辑问题以包含日志的输出? @JamesSmith,点击后退按钮后没有任何日志( 啊,对,pushState 不会导致任何内容被加载。 developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/…。 /desktop/manage/add 是用户之前访问过的页面吗? @JamesSmith,是的,完全正确。更多详细信息:我在“/desktop/manage/”中,然后通过 ajax 打开“/desktop/manage/add”,然后生成任何获取/发布请求(例如转到 google.com)然后单击“返回”按钮并获取此页面。 我们愿意为您提供帮助:您需要编辑您的问题并添加详细信息。如果可能的话,您可以通过屏幕截图:) 【参考方案1】:

前段时间我也遇到过同样的问题,但是用replaceState() 代替。起初我没有注意到这一点,但我的开发人员同事提醒了我。事实证明,我没有注意到它,因为我使用的是 Firefox,这似乎是他正在使用的 Chrome/Chromium 独有的错误。事实上,这似乎是a while now的一个bug,但谷歌还没有修复它。

话虽如此,似乎没有真正的解决方法,至少在 Google 修复它之前是这样。当然,简单地重新加载页面会让问题暂时消失,但你仍然会看到丑陋的代码。你也可以不使用 Chrome/Chromium,但这也不是一个解决方案。

【讨论】:

以上是关于rails ajax URL更改的主要内容,如果未能解决你的问题,请参考以下文章

在 ruby​​ rails html 视图中使用 Ajax 表单更改图标“like”按钮类

如何使用 Rails 4 轮询数据库中的一个值,如果值更改,则使用 AJAX 刷新

更改 Rails 3 开发的基本 URL

Rails 4 中的 AJAX、HTML5 历史 API 和缓存

ajax请求后如何更改URL?

Facebook 中的 URL 更改 ajax 调用