我正在使用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>
答案 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]
提供。