Jquery 使用formdata过帐数组

Jquery 使用formdata过帐数组,jquery,arrays,image,html,post,Jquery,Arrays,Image,Html,Post,我使用新的HTML5 FormData对象通过Ajax发布一些值和图像。到目前为止效果还不错。现在,我想发布一个使用这个对象的数组,但我在服务器端得到的只是“[object-object]”。如何发布带有formdata的数组 到目前为止我得到了什么 var formData=new FormData(); formData.append('text', $('#text').attr('value')); formData.append('headline',$('#headline').at

我使用新的HTML5 FormData对象通过Ajax发布一些值和图像。到目前为止效果还不错。现在,我想发布一个使用这个对象的数组,但我在服务器端得到的只是“[object-object]”。如何发布带有formdata的数组

到目前为止我得到了什么

var formData=new FormData();
formData.append('text', $('#text').attr('value'));
formData.append('headline',$('#headline').attr('value'));
formData.append('myarray',{key1: 'bla', key2: 'blubb'});
最后一行行不通。我用这个代码发送请求

                 $.ajax({
                        url: 'xyz',
                        data: formData,
                        type: 'POST',
                        processData: false,
                        contentType: false,
                        success: function(data) { 
                            var decoded=$.parseJSON(data);
                            displaySuccess('Success', decoded.message); 
                        },error: function(data){
                            var decoded=$.parseJSON(data);
                            displayError('Error', decoded.message);
                        },complete: function(data){
                            $('#cursor').hide();
                            $("#submitbutton").removeAttr('disabled')
                        }
                    });

提前感谢。

从语法上看,您似乎在试图传递对象,而不是数组。我认为不能通过HTML表单传递对象

{ key1 : value1 , key2 : value2 }
vs

[ value1, value2 ]
function serializeData(name, arr)
 {
   var a = [];
    for (var i = 0; i < arr.length; i++) 
        {
      for (var key in arr[i]) 
    {
 a.push({ name: name + '[' + i + '].' + key + '', value: arr[i][key] });
     }
        }
         return a;
                  }

  var mydata = serializeData('billlist', billlists);

  $.each(mydata, function (key, input) {
       fd.append(input.name, input.value);
            });
这是对常规的一个方便的参考,在关联数组的每个元素上使用
.append()
,可能会产生您期望的结果

代替这一行:

formData.append('myarray',{key1: 'bla', key2: 'blubb'});
您可以尝试以下方法:

var myarray = {key1: 'bla', key2: 'blubb'};

jQuery.each(myarray, function(key, value) {
    formData.append('myarray['+key+']', value);
});

谢谢。我现在想出了这个解决方案:

                for (i = 0; i < social_networks.length; i++) {
                    formData.append("myarray["+i+"][mykey]",arr[i]['mykey']);
                    formData.append("myarray["+i+"][mykey2]",arr[i]['mykey2']);
                }
for(i=0;i
试试这个。这对我有用

var files = $scope.myFile;
        var fd = new FormData();
        fd.append("file", files[0]);
        fd.append("assignment", JSON.stringify({ classAssignment: $scope.editItem }));

我的阵列列表是这样的

billlists = [{ Color: "White"Quantity: "1"Shape: "2.0"SizeNo1: "1"SizeNo2: "1"StoneColorCost: "20000"StoneColorWT: "0.006"Type: "1"__proto__: Object1: Color: "White"Quantity: "1"Shape: "2.0"SizeNo1: "0.5"SizeNo2: "0.7"StoneColorCost: "6"StoneColorWT: "0.005"Type: "1"},

{ Color: "White"Quantity: "1"Shape: "2.0"SizeNo1: "1"SizeNo2: "1"StoneColorCost: "20000"StoneColorWT: "0.006"Type: "1"__proto__: Object1: Color: "White"Quantity: "1"Shape: "2.0"SizeNo1: "0.5"SizeNo2: "0.7"StoneColorCost: "6"StoneColorWT: "0.005"Type: "1"}]
此代码用于格式化诸如键值对之类的数据

[ value1, value2 ]
function serializeData(name, arr)
 {
   var a = [];
    for (var i = 0; i < arr.length; i++) 
        {
      for (var key in arr[i]) 
    {
 a.push({ name: name + '[' + i + '].' + key + '', value: arr[i][key] });
     }
        }
         return a;
                  }

  var mydata = serializeData('billlist', billlists);

  $.each(mydata, function (key, input) {
       fd.append(input.name, input.value);
            });
这对我有用

但在另一篇博文中,我看到的数据是pass-like

0: {name: "billlist[0].Type", value: "1"}
1: {name: "billlist[0].Color", value: "White"}
2: {name: "billlist[0].Shape", value: "2.0"}
3: {name: "billlist[0].SizeNo1", value: "1"}
4: {name: "billlist[0].SizeNo2", value: "1"}
5: {name: "billlist[0].Quantity", value: "1"}
6: {name: "billlist[0].StoneColorWT", value: "0.006"}
7: {name: "billlist[0].StoneColorCost", value: "20000"}
8: {name: "billlist[1].Type", value: "1"}
9: {name: "billlist[1].Color", value: "White"}
10: {name: "billlist[1].Shape", value: "2.0"}
11: {name: "billlist[1].SizeNo1", value: "0.5"}
12: {name: "billlist[1].SizeNo2", value: "0.7"}
13: {name: "billlist[1].Quantity", value: "1"}
14: {name: "billlist[1].StoneColorWT", value: "0.005"}
15: {name: "billlist[1].StoneColorCost", value: "6"}
 {name: "billlist[0][Type]", value: "1"}

它对我不起作用

是的,你可以传递对象!尝试一下jquery的数据字段。刚刚创建了一个复杂的对象并传递了它,它在serversideHello@DanyKhalife上保持了相同的结构。您是如何实现的?我也有类似的问题。@uikrosoft您可以将对象原样传递给jQuery。假设您有一个对象
var myData={a:1,b:2,c:[3,4,5]}jQuery调用类似于
$.ajax({url:'/myscript.php',method:'POST',data:myData,dataType:'json',success:function(response){console.log(response);}})
hi@billim还发送数组formData.append(“ProIList”,P.ProIList);在这里,但我没有得到服务器端的这个数组列表,所以你能知道如何得到这个列表吗?如果你认为这是最好的答案,那么你应该接受它,以便将来帮助其他人