通过post to action发送数据创建Jquery和Ruby on Rails

时间:2014-12-28 04:18:11

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

我正在使用Jquery。我在localhost:3000 / provinces / new中创建了一个名为@provinces的数组javasript。我需要通过POST方法将该数组传递给localhost / provinces,我的意思是创建操作 我创建了一个名为“通过帖子发送数据”的特殊按钮

<html>
<head>
  <title></title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script>
   $(document).ready(function(){
     $provinces=new Array();

  $(".add").click(function(e) {

    $("body").append("<label class='label1'>Add Province</label>");
    $("body").append("<input type='text' class='value'/>")
    $(".add").prop('disabled', true);
    $("body").append("<input type='button' id='save' value='Save'>")    
   });
   $("body").on("click","#save", function(){
        $provinces.push($(".value").val());
        $(".label1").remove();
        $(".value").remove();
        $(".add").prop('disabled', false);
        $(this).remove();        
     });
   $("body").on("click",".show", function(){
      $cadena="";   
         for($i=0;$i<$provinces.length;$i++){
            $cadena=$cadena+"\n"+$provinces[$i];
         }
         alert($cadena);
   });
   $("body").on("click",".send", function(){

   });
  });

  </script>
</head>
<body>
  <h1>New province</h1>
  <button class="add">Add Province</button>
  <button class="show">Show array</button>  
  <button class="send">SendData via post</button>
  <br/><br/>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

检查这一行:

$provinces=new Array();

1)在js中,$ sign在使用时没有特殊含义。实际上,有时在jQuery中使用$符号来表示已为变量分配了包装集,并且您的数组不是包装集,因此$符号具有误导性。

2)new Array()相当于[],所以你可以简单地写:

var provinces = [];

您无法在javascript和ruby代码之间传递数组(反之亦然)。但是,您可以使用javascript将包含字符串的请求发送到服务器上的ruby程序。

1)您可以使用以下命令将数组转换为字符串:

JSON.stringify()

2)您可以使用jQuery的.ajax()函数将字符串发送到服务器上的ruby程序:

$.ajax({
    url: '/provinces/create',
    type: 'POST',
    contentType: 'application/json',
    data: json_str
})
.success(function(resp_data, text_status) {
  console.log('resp: ' + resp_data);
  console.log('status: ' + text_status);
})
.fail(function(jqXHR, textStatus, errorThrown) {
  console.log('status: ' + textStatus);
  console.log('error: ' + errorThrown);
})

3)在服务器端,如果请求的Content-Type等于'application / json',Rails会自动将请求体(您的json_str)解析为ruby Arrays和Hashes,Rails在参数哈希。该数组将以params['_json']params[provinces]['_json]的形式提供。

如果您不想在rails params hash中的'_json'键下查找数组,那么在您的js代码中,您可以将数组转换为对象,如下所示:

var provinces = [];
...
var obj =  {my_array: provinces};
var json_str = JSON.stringify(obj);

然后在您的ruby代码中,数组将以params[my_array]params[provinces][my_array]提供。