9

新しい HTML5 FormData-Object を使用して、いくつかの値と画像を A​​jax 経由で投稿しています。これまでのところ問題なく動作します。今、このオブジェクトを使用して配列を投稿したいのですが、サーバー側にあるのは「[オブジェクト - オブジェクト]」だけです。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')
                        }
                    });

前もって感謝します。

4

5 に答える 5

16

連想配列の各要素で使用.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);
});
于 2012-06-07T19:47:14.297 に答える
6

ありがとう。私は今、この解決策を思いつきました:

                for (i = 0; i < social_networks.length; i++) {
                    formData.append("myarray["+i+"][mykey]",arr[i]['mykey']);
                    formData.append("myarray["+i+"][mykey2]",arr[i]['mykey2']);
                }
于 2012-06-09T07:21:03.307 に答える
3

構文から、配列ではなくオブジェクトを渡そうとしているようです。オブジェクトを HTML フォームで渡すことはできないと思います。

{ key1 : value1 , key2 : value2 }

[ value1, value2 ]

これは、一般的なJS 構文の便利なリファレンスです。

于 2012-06-07T18:17:24.293 に答える
2

これを試して。それは私のために働いた。

var files = $scope.myFile;
        var fd = new FormData();
        fd.append("file", files[0]);
        fd.append("assignment", JSON.stringify({ classAssignment: $scope.editItem }));
于 2015-03-14T05:01:57.813 に答える