2014-10-10 158 views
2

我正在使用Rails 4.1.1和Ruby 2.1.0开发Ruby on Rails应用程序。Rails 4:Turbolinks发送请求两次并重新加载页面

我设置了使用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

尝试在您的表单中使用:onsubmit => "false",并使用点击功能来运行您的提交。

+0

谢谢@zakaria ..但它没有帮助我...... – 2014-11-04 14:17:11

4

可能有3个原因:

  • 你响应状态这一要求是400和600
  • 之间您的回复内容类型不匹配/^(?:text\/html|application\/xhtml\+xml|application\/xml)(?:;|$)/
  • 资产在新的页面发生了变化。 例如,您在包含另一个js的不同布局中呈现新页面。当data-turbolinks-track为真时,turbolinks会做点心。

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 
相关问题