2

我已经在一个 rails (3.2.6) 应用程序中成功添加了 ujs。将 :remote => true 添加到我的表单标记允许我对我的 js.erb 文件进行 ajax 调用以动态加载 div 等。

但是在同一台机器上的另一个应用程序(Ubuntu 12.0.4)中,ujs 引擎似乎无法正常工作。我总是收到找不到模板,因为表单发送的是格式 => html 而不是 js。如果我强制表单使用 js 格式(格式 => 'js'),那么它只会呈现 js.erb 文件,而不是通过 ajax 调用它。

在 application.js 中,我包含了正确的标头,其中包含以下内容:

//= require jquery
//= require jquery_ujs
//= require_tree .

当我实际浏览到使用应用程序布局的主主页时,会包含 javascript 文件,其中包括上面提到的 javascirpt 引用。页面中的表格如下:

<%= form_tag list_path, :remote => true, :id => 'frmBookResults', :method => :post do %>

但是虽然它包含:remote => true,并且为 list_path 建立了一个路由(该路由有效,因为如果我将 list.js.erb 更改为 list.html.erb,视图会呈现),以及控制器中的一个方法为了处理请求(def list....end),随后的 list.js.erb 被忽略,我得到一个找不到模板的错误,因为 rails 正在将表单请求作为 html 处理,我可以在日志中确认。

我到处寻找解决方案,但无法弄清楚为什么我的 ujs 不适用于这个特定的应用程序,因为它与我的工作应用程序、gemset、版本和配置几乎相同。

我发现了其他几篇关于堆栈溢出的文章,人们遇到了同样的问题,但没有给出最终的有效答案。

任何帮助或方向将不胜感激。

4

1 回答 1

1

这确实是ajax被破坏的问题。我用来提交表单的 onkeyup 触发器如下:

<%= form_tag list_path, :id => 'frmBookResults', :remote => true do %>
    <input id='keyword' type='text' onkeyup='document.forms["frmBookResults"].submit();'/>
<% end %>

请注意以下事项:

document.forms["frmBookResults"].submit();

显然,通过 javascript 提交表单是问题所在,因为当我更新 onkeyup 以使用如下所述的 jquery 提交时,rails ujs 启动并且对我的 list.js.erb 的 ajax 调用有效:

onkeyup="jQuery('#frmBookResults').submit()"

感谢您的所有反馈 mccanff!您与来自linkedIn 的rails 组的其他开发人员的贡献帮助我最终解决了我的问题。

于 2012-12-12T23:21:17.520 回答