ajax + rails - 发布数据值消失

时间:2018-01-30 00:47:46

标签: jquery ruby-on-rails ruby ajax

我正在开发一个rails应用程序。我有一些JS数据我发送到rails。问题是,我的ajax请求中的一个值不存在于rails'从JS到控制器的时候params

首先,触发它的是这个顶级

if (prospects.length > 0) {
  _self.sendData(prospects);
} else {
  alert('must submit more than 1 prospect');
}

该功能看起来像这样

sendData: function(prospects) {
    var prospects = prospects;
    var user_id = $('#user_id').val();
    var team_id = $('#team_id').val();

    var data = {
      prospects: prospects,
      user_id: user_id,
      team_id: team_id
    }

    // data looks like (from chrome console)
   // {prospects: Array(2), user_id: "950", team_id: ""}    

    $.ajax({
      url: '/path/to/url/',
      type: 'PUT',
      dataType: 'json',
      data: data,
      success: function(data) {
        console.log('success from sendData!');
        console.log(data);
      },
      error: function(error) {
        console.log('error from sendData');
        console.log(error);
      }
    });
  }

在上面的这个函数中,我看到了所有值。接下来是rails控制器

def process
    p '*' * 100
    p params
    p '*' * 100
end

这些p语句的输出是 " ********************************************** ************************************************** ****" {" user_id" =>" 950"," team_id" =>""," action" = >" method_name"," controller" =>" name / of / controller"} " ********************************************** ************************************************** ****"

如您所见,params[:prospects]为零!我没有看到我的错误,也不知道为什么这个价值不能让它变成控制器。

有谁知道为什么params[:prospects]不存在?

更新

我能够通过将$.ajax数据包装在jQuery' $.param()函数中来实现它。我的工作函数看起来像这样

sendData: function(prospects) {
        var prospects = prospects;
        var user_id = $('#user_id').val();
        var team_id = $('#team_id').val();

        var data = {
          prospects: prospects,
          user_id: user_id,
          team_id: team_id
        }

        var json_data = $.param(data);  

        $.ajax({
          url: '/path/to/url/',
          type: 'PUT',
          dataType: 'json',
          data: json_data,
          success: function(data) {
            console.log('success from sendData!');
            console.log(data);
          },
          error: function(error) {
            console.log('error from sendData');
            console.log(error);
          }
        });
      }

1 个答案:

答案 0 :(得分:0)

令人困惑的是,dataType的{​​{1}}选项未设置数据对象的类型。它设置服务器响应中预期的类型。因此,您必须添加:

$.ajax

Rails会选择它并通过... data: JSON.stringify({yada: 'yada'}) contentType: 'application/json' ... 函数为您提供您期望的内容。

我希望有所帮助。