Rails如何使用ajax提交表单并包含一些jquery变量

Rails如何使用ajax提交表单并包含一些jquery变量,jquery,ruby-on-rails,ruby,ajax,ruby-on-rails-3,Jquery,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,我试图通过ajax提交表单,并包含一些通过jquery设置的变量 /视图/应用程序/_form.html.erb <%= form_for(@application, :html => {:class => "organizer"}, :remote => true) do |f| %> // fields in here <% end %> /assets/javascripts/applications.js $('.organizer').s

我试图通过ajax提交表单,并包含一些通过jquery设置的变量

/视图/应用程序/_form.html.erb

<%= form_for(@application, :html => {:class => "organizer"}, :remote => true) do |f| %>
  // fields in here
<% end %>
/assets/javascripts/applications.js

$('.organizer').submit(function() {

        var dataToSubmit = $(this).serialize();
        var field_values = [];
        var x_values = [];
        var y_values = [];

        // i add values to the arrays above here

        for(i = 0; i < field_values.length; ++i) {
            dataToSubmit += "&field_name="+field_values[i]+"&xposition="+x_values[i]+"&yposition="+y_values[i];
        }

        $.post($(this).attr('action'), dataToSubmit);   
    });

您可以通过阻止其默认行为来阻止for正常提交。为此,向函数中添加一个事件参数并调用
.preventDefault()

$('.organizer')。提交(函数(e){
e、 预防默认值();
var dataToSubmit=$(this).serialize();
变量字段_值=[];
var x_值=[];
变量y_值=[];
//我在这里向上面的数组添加值
对于(i=0;i
您可以尝试停止除您的处理程序之外的所有处理程序。试试这个:

$('.organizer').submit(function(e) {
  e.preventDefault(); // stops default behavior
  e.stopPropagation(); // prevents event bubbling
  // you code
  return false;
});

显然,问题不是因为如果我删除整个
$('.organizer').submit..
块,表单仍然会被提交。@Catfish这就是为什么要使用提交处理程序通过ajax发送数据的原因。您需要提交处理程序来阻止表单提交(使用
.preventDefault()
)我尝试了您的解决方案,但它不起作用。表格提交两次。如果我从applications.js文件中删除所有内容,无论是否有
$('.organizer'),表单仍然会被提交。提交
。如果我从applications.js中完全删除jquery块,那么我在服务器日志中只会看到一个发送的请求,这是由ApplicationController处理的
更新为js
。如果它是通过ajax自动发送的,我如何在ajax请求中添加额外的传递jquery变量呢?这似乎是可行的。它只导致一个请求进入控制器,这是我的显式ajax请求。
Started PUT "/applications/3" for 127.0.0.1 at 2013-01-18 00:06:19 -0600
Processing by ApplicationsController#update as */*
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"3LOzuiL/PU6HypJ4OeN5H9yrX3Xyk0VT6XpcFYd1wY0=", "application"=>{"application_field_attributes"=>{"0"=>{"id"=>"8"}, "1"=>{"id"=>"9"}}}, "field_name"=>"aaa", "xposition"=>"0", "yposition"=>"0", "id"=>"3"}
  Account Load (0.3ms)  SELECT `accounts`.* FROM `accounts` WHERE `accounts`.`subdomain` = 'localhost' LIMIT 1
  User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  Application Load (0.4ms)  SELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 3 LIMIT 1


Started PUT "/applications/3" for 127.0.0.1 at 2013-01-18 00:06:19 -0600
Processing by ApplicationsController#update as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"3LOzuiL/PU6HypJ4OeN5H9yrX3Xyk0VT6XpcFYd1wY0=", "application"=>{"application_field_attributes"=>{"0"=>{"id"=>"8"}, "1"=>{"id"=>"9"}}}, "commit"=>"Submit", "id"=>"3"}
  Account Load (0.3ms)  SELECT `accounts`.* FROM `accounts` WHERE `accounts`.`subdomain` = 'localhost' LIMIT 1
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  Application Load (0.4ms)  SELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 3 LIMIT 1
$('.organizer').submit(function(e) {
        e.preventDefault();
        var dataToSubmit = $(this).serialize();
        var field_values = [];
        var x_values = [];
        var y_values = [];

        // i add values to the arrays above here

        for(i = 0; i < field_values.length; ++i) {
            dataToSubmit += "&field_name="+field_values[i]+"&xposition="+x_values[i]+"&yposition="+y_values[i];
        }

        $.post($(this).attr('action'), dataToSubmit);   
    });
$('.organizer').submit(function(e) {
  e.preventDefault(); // stops default behavior
  e.stopPropagation(); // prevents event bubbling
  // you code
  return false;
});