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

Rails 3: Jquery code breaks when making simple AJAX call, think is a simple mistake

本文关键字:简单 一个 错误 代码 Jquery Rails 调用 AJAX 中断      更新时间:2023-09-26

希望在设计注册控制器中更新User模型。

在我看来,我有

<%= 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()
          });         
        });
    });  
});

我很困惑,我想这一定是一个简单的错误,非常感谢。

可以尝试一下:

Rails防止随机模型属性从表单发送,并有一个列表,将允许通过params变量。在Rails 3中,这是通过模型中的attr_accessible设置的。在Rails 4中,它通过控制器中的strong_params gem进行设置,如下所示。如果您没有将facebook_share设置为白名单,它将被静默剥离。

还是……

:remote => true

是一个rails的东西,它会照顾你的ajax,只要你包括ujs脚本。您不需要使用Jquery来发送数据,只需处理返回的内容即可。更多信息请点击这里。如果你启用了这个功能,并且在上面做了一些jQuery,可能会有一些冲突。

两种方法:

为了深入了解通过AJAX实际返回的内容,我建议安装RubyMine并启用调试器,以便您可以在控制器中的断点上暂停并查看发生了什么。可以让你从这类事情中解脱出来:)