我正在使用Rails 4.1.1和Ruby 2.1.0开发Ruby on Rails应用程序。
我已将应用程序设置为使用Turbolinks,这会导致AJAX链接出现问题。当我点击一个调用AJAX函数的链接时,会发生三件事:
1.进行AJAX通话
2.重新加载相同的链接
3.应用程序服务器运行两次所有请求。
如何使这些链接作为标准AJAX链接运行?
供参考,以下是我GemFile
的相关部分:
gem 'turbolinks'
gem 'jquery-turbolinks'
以下是我在application.js
中包含JavaScript库的方法:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
以下是我在应用程序布局中包含JavaScript文件的方法:
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
答案 0 :(得分:4)
可能有三个原因:
/^(?:text\/html|application\/xhtml\+xml|application\/xml)(?:;|$)/
data-turbolinks-track
为真,则turbolink会进行更新。可以从以下源代码获得3个原因。当响应给出文档正文时,它会显示它,或者它会刷新页面。
fetchReplacement = (url, onLoadFunction, showProgressBar = true) ->
...
xhr.onload = ->
triggerEvent EVENTS.RECEIVE, url: url.absolute
if doc = processResponse()
reflectNewUrl url
reflectRedirectedUrl()
changePage extractTitleAndBody(doc)...
manuallyTriggerHashChangeForFirefox()
onLoadFunction?()
triggerEvent EVENTS.LOAD
else
document.location.href = crossOriginRedirect() or url.absolute
processResponse = ->
clientOrServerError = ->
400 <= xhr.status < 600
validContent = ->
(contentType = xhr.getResponseHeader('Content-Type'))? and
contentType.match /^(?:text\/html|application\/xhtml\+xml|application\/xml)(?:;|$)/
...
//here is the check
if not clientOrServerError() and validContent()
doc = createDocument xhr.responseText
if doc and !assetsChanged doc
return doc
答案 1 :(得分:-1)
尝试在表单中使用:onsubmit => "false"
,然后使用点击功能运行提交。