1

我需要通过 jquery ajax 将一个数组发送到 rails 控制器

jQuery代码

$(document).ready(function(){

var counter = 2;
$("#addButton").click(function () {
   var newTextBoxDiv = $(document.createElement('div'))
     .attr("id", 'TextBoxDiv' + counter);

   newTextBoxDiv.after().html('<input type="text" placeholder="Role" name="Role' + 
   counter + 
      '" id="textbox' + counter + '" value="" > <input type="text" 
placeholder="Search" name="search' + counter + 
      '" id="se" value="" >');

newTextBoxDiv.appendTo("#TextBoxesGroup");
counter++;
});



$("#getButton").click(function () {
var fd = new FormData($("#movie-form")[0]); 
var name = document.getElementById("file").files[0].name;
var arr = [];
var msg = '';
for(i=1; i<counter;i++){
  msg += "\n Textbox #" + i + " : " + $('#textbox' + i).val(); 
      arr[i] = $('#textbox' + i).val();
}
 $.each(arr,function(index, item)
{   
     alert(index);
     alert(item);
   }
);

fd.append( 'file', name);
fd.append( 'file22', name);
$.ajax({
url: '/create',
data: {fd:fd,arr:arr},
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});
return false;
});

但它显示了错误

解析请求参数时出错。内容:REXML::ParseException(文档“[object Object]”没有有效的根):

4

2 回答 2

3

要通过 jquery 执行 ajax POST 请求,数据必须是字符串。

$.ajax({
    url: "/create",
    type: 'POST',
    contentType: 'application/json',
    dataType: 'json',
    data: JSON.stringify(formData),
    function(data){
        alert(data)
    }
});

注意 JSON 在 IE6/7 中未定义。如果您需要针对这些浏览器,请使用: https ://github.com/douglascrockford/JSON-js

于 2013-05-08T09:09:46.170 回答
0

你能控制台记录你的阵列吗?这会容易得多,您可以在单击时检查子元素。在 FireFox(安装了 FireBug 插件)或 Chrome 中按 F12 打开开发工具并查看控制台。

我认为这不适用于 IE,但您可以使用 JSON.stringify 将 JavaScript 对象转换为 JSON,这样您就可以将 msg 作为 JSON 发送:

尝试:

for(i=1; i<counter;i++){
      arr[i] = $('#textbox' + i).val();
}
msg= JSON.stringify(arr)

您遇到的错误来自您的 rails 应用程序,但您尚未发布任何发生该错误的代码。

我不确定 rexml 在 Rails 中做了什么,所以不能真正帮助你。

于 2013-05-08T08:35:14.123 回答