Rails 5页面内锚点link_to触发不必要服务器请求求助
Rails 5 锚点跳转触发服务器请求的解决方案
没错,这个问题确实和TurboLinks脱不了干系!
在Rails 5中,TurboLinks默认会拦截页面上的所有链接请求,尝试通过AJAX方式加载页面内容——哪怕是指向当前页面锚点的链接。这就导致了你遇到的情况:虽然页面能跳转到锚点位置,但服务器端还是收到了新的请求,进而让未提交的表单数据丢失。
要实现纯前端的页面内锚点跳转,你可以试试这几种方法:
给单个链接禁用TurboLinks拦截
修改你的link_to代码,直接指定锚点的href,并添加data: { turbolinks: false }属性,告诉TurboLinks不要处理这个链接:<%= link_to "Back to Top", "#top-page", data: { turbolinks: false } %>另外建议把你的标题标签改成用
id属性(HTML5标准更推荐这种方式,兼容性更好):<h1 id="top-page">Blogs</h1>全局配置TurboLinks忽略锚点链接
如果你有很多这类锚点链接,不想逐个添加属性,可以在TurboLinks的初始化代码里设置规则,让它自动忽略指向当前页面锚点的请求。不过这种方式灵活性稍弱,适合全局统一需求的场景。
这样修改后,点击链接就只会触发浏览器原生的锚点滚动,不会再向服务器发送请求,表单里的临时数据也就不会丢失啦。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

