Rails 3:在进行简单的AJAX调用时Jquery代码中断,认为是一个简单的错误

时间:2014-07-25 06:37:47

标签: javascript jquery ruby-on-rails ajax

在设计注册控制器中查找更新用户模型。

在我看来,我有

<%= form_for(@user, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :id => 'share-form' }, :remote => true) do |f| %>  

             <%= f.check_box :facebook_share  %>
             <%= f.label :facebook_share, :class => 'submit-share' %>

            <% end %>

因此表单的id =“share-form”,我指定了一个url和方法。

当我的Jquery表格正常提交时,数据库不会更新任何数据:

$(document).ready(function(){

    $('.submit-share').click(function() {
        $('#share-form').submit();    
    });
});

控制台显示:

Started POST "/users" for 127.0.0.1 at 2014-07-25 13:34:21 +0700
  Processing by RegistrationsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"GrQWqDseCwhlrpNhv8i3hvlL4iwae0U/pP+wSu4iabk=", "user"=>{"facebook_share"=>"0"}}
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
  SQL (0.8ms)  SELECT 1 FROM "users" WHERE (LOWER("users"."email") = LOWER('drew@drew.io')) AND ("users".id <> 31) LIMIT 1
  SQL (0.1ms)  SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
  CACHE (0.0ms)  SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
  CACHE (0.0ms)  SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
  SQL (0.1ms)  SELECT 1 FROM "users" WHERE ("users"."username" = 'facebookname') AND ("users".id <> 31) LIMIT 1
  Slug Load (0.7ms)  SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 31 AND "slugs".sluggable_type = 'User') ORDER BY id DESC LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
Redirected to http://localhost:3000/
Completed 302 Found in 361ms

当我添加此ajax调用以更新数据时,提交不起作用且没有任何反应。我哪里错了? 控制台没有说什么

$(document).ready(function(){

    $('.submit-share').click(function() {
        $('#share-form').submit(function(){
          $.ajax({
            method: this.method,
            url: this.action,
            data: $('#share-form').serialize()
          });         
        });
    });  
});

我很困惑,我认为这是一个简单的错误,非常感谢你。

1 个答案:

答案 0 :(得分:0)

要尝试的一些事项:

Rails防止从表单发送随机模型属性,并列出一些允许进入params变量的属性。在Rails 3中,这是通过模型中的attr_accessible设置的。在Rails 4中,它通过控制器中的strong_params gem设置,如this。如果您尚未将facebook_share设置为白名单,则会以静默方式将其删除。

或者...

:remote => true

只要你包含ujs脚本,它就是一个可以为你处理ajax的东西。您不需要执行Jquery位来发送数据,只是为了处理返回的内容。更多信息here。如果你已启用此功能并且还在顶部执行一些jQuery,则可能存在一些冲突。

无论哪种方式:

为了深入了解通过AJAX实际返回的内容,我建议安装RubyMineenabling the debugger,这样您就可以暂停控制器中的断点并查看发生了什么。倾向于解决这类问题:)