【问题标题】:Rails - Turbolinks vs. Ajax Json responseRails - Turbolinks 与 Ajax Json 响应
【发布时间】:2014-02-07 09:46:18
【问题描述】:

我开发了一个小型演示应用程序来测试 Facebook 和 Twitter 等社交媒体的一些接口 API。

当我在视图中使用激活的turbolinks gem 进行 Ajax-json 调用时,我遇到了一个“问题”。有时(是的,有时!)它在视图中呈现 JSON 响应(如 .json)而不是正确的页面 (html)。如果我禁用 turbolinks gem,问题就不会再出现了。

有人知道为什么会这样吗?即使使用turbolinks gem,我还能做些什么来避免这个问题?

如果您需要一些代码来更好地理解它,您可以在此处找到执行(有时)错误的调用(检查 Ajax 调用):链接

【问题讨论】:

    标签: ruby-on-rails ajax json ruby-on-rails-4 turbolinks


    【解决方案1】:

    问题在于 Turbolinks 大部分时间会通过 Ajax 重新加载页面,这意味着不会发生典型的 javascript DOM 加载过程


    代表团

    在我看来,您已将 ajax 进程绑定到特定元素,如下所示:

    $("element").on("click", function() { 
        $.ajax({....
    
        ...});
    });
    

    解决这个问题的方法是使用javascript delegation 将元素绑定到文档,并委托给您需要的元素

    查看您的代码,我会这样做:

    $(document).on("submit", "form", function(){
        // .... your ajax code
    });
    

    我还会确保您使用unobtrusive javascript(将其放在它自己的 JS 文件中,而不是您的视图中)。如果您向我们提供更多背景信息,我可以为您创建更量身定制的解决方案

    【讨论】:

    • 感谢@Rich 的完整回答。我会试试看。你知道为什么这种情况只是偶尔发生吗?有些请求以正确的方式处理,有些则没有,但“方法”是一样的。
    • 没问题!不确定具体细节,但委托是使用 Turbolinks 的 Rails 应用程序的常见问题!
    • 再次感谢您的支持!我已经按照您的建议进行了尝试并且有效!干得好:)
    • 谢谢哥们!很高兴听到它