1

我的表格

<%= form_tag load_link_path, :remote => true, :html => { :'data-type' => 'html', :id => 'load_link_form' } do %>
<fieldset> 
    <%= url_field_tag(:url) %>
    <div class="validation-error"></div>
    <%= submit_tag %>
</fieldset>
<% end %>

我的行动

def load
  format.js 
end

我的 js 视图(load.js.erb)

alert(0);

提交表单时,警报不会触发。控制台输出:

Processing by LinksController#load as JS
  Parameters: {"utf8"=>"✓", "commit"=>"Save changes", "url"=>"http://www.alfajango.com/blog/rails-3-remote-links-and-forms/", "authenticity_token"=>"KWwfZH+sivCrWdlVBUPM0MBRPHzcDhmbB96ckLQ82Dg="}
  Rendered links/load.js.erb (0.4ms)
Completed 200 OK in 2822ms (Views: 9.9ms | ActiveRecord: 0.0ms)
4

1 回答 1

3

尝试respond_to在控制器顶部添加,然后将 format.js 调用包装在一个respond_with块中

class LinksController < ApplicationController
  respond_to :html, :js

  def load
    respond_with do |format|
      format.js
    end
  end
end

我建议阅读这篇文章,它是使用 rails3 imo 进行 ajax 的最佳指南。

更新:

在做了一些小改动后,我让它工作了:

rails 中 ajax 调用的默认方法是“GET”,所以如果你想做一个“POST”,你需要在:data-method=>"post". 我还从您的表单标签中删除了 html 哈希并将数据类型设置为script,见下文:

<%= form_tag load_link_path, :remote => true, :id => 'create_link_form', :data => {:type=>"script", :"method"=>"post"} do %>

此外,您需要从 js.erb 文件中取消注释警报,因此更改为:

//alert(0);
$('#message').val('ok');

到:

alert(0);
//$('#message').val('ok');

希望这会有所帮助,如果没有,请告诉我,我会将我的代码推送到 github :)

于 2012-04-20T01:20:22.230 回答