Javascript Rails 4:Turbolinks发送两次请求并重新加载页面

Javascript Rails 4:Turbolinks发送两次请求并重新加载页面,javascript,ruby,ajax,ruby-on-rails-4.1,turbolinks,Javascript,Ruby,Ajax,Ruby On Rails 4.1,Turbolinks,我正在使用Rails 4.1.1和Ruby 2.1.0开发RubyonRails应用程序 我已将应用程序设置为使用TurboLink,这导致AJAX链接出现问题。当我单击调用AJAX函数的链接时,会发生三件事: 1.AJAX调用已发出 2.相同的链接被重新加载 3.应用服务器运行所有请求两次 如何使这些链接作为标准AJAX链接运行 以下是我的GemFile的相关部分,以供参考: gem 'turbolinks' gem 'jquery-turbolinks' 下面是我如何在applicatio

我正在使用Rails 4.1.1和Ruby 2.1.0开发RubyonRails应用程序

我已将应用程序设置为使用TurboLink,这导致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 %>
true%>
正确%>

尝试在表单中使用
:onsubmit=>“false”
,然后使用单击功能运行提交。

可能有三个原因:

  • 您对该请求的响应状态介于400和600之间
  • 您的响应内容类型与
    /^(?:text\/html | application\/xhtml\+xml | application\/xml)(?:;|$)/
  • 新页面中的资产已更改。 例如,在包含另一个js的不同布局中呈现新页面。当
    data turbolinks track
    为真时,turbolinks将进行刷新
这三个原因可以从下面的源代码中得到。当响应给出单据体时,会显示单据体,或者刷新页面

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
fetchReplacement=(url,onLoadFunction,showProgressBar=true)->
...
xhr.onload=->
TriggerEvents.RECEIVE,url:url.absolute
如果doc=processResponse()
reflectNewUrl
reflectRedirectedUrl()
更改页面提取标题正文(文档)。。。
手动触发HashChangeForFirefox()
onload函数()
TriggerEvents.LOAD
其他的
document.location.href=crossOriginRedirect()或url.absolute
processResponse=->
clientOrServerError=->
400
(contentType=xhr.getResponseHeader('Content-Type'))?和
contentType.match/^(?:text\/html | application\/xhtml\+xml | application\/xml)(?:;|$)/
...
//这是支票
如果不是clientOrServerError()和validContent())
doc=createDocument xhr.responseText
如果博士和!资产变更单
退货单