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 刷新