提问者:小点点

我可以在javascript中追加一个数组到formdata吗?


我正在使用FormData上传文件。我还想发送一组其他数据。

当我只发送图像时,效果很好。当我在formdata中添加一些文本时,效果很好。当我尝试附加下面的“tags”数组时,其他一切都可以正常工作,但没有发送任何数组。

任何已知的FormData和附加数组问题?

实例化formData:

formdata=newformdata()

我创建的数组。安慰日志显示一切正常。

        // Get the tags
        tags = new Array();
        $('.tag-form').each(function(i){
            article = $(this).find('input[name="article"]').val();
            gender = $(this).find('input[name="gender"]').val();
            brand = $(this).find('input[name="brand"]').val();
            this_tag = new Array();
            this_tag.article = article;
            this_tag.gender = gender;
            this_tag.brand = brand;
            tags.push(this_tag);    
            console.log('This is tags array: ');
            console.log(tags);
        });
        formdata.append('tags', tags);
        console.log('This is formdata: ');
        console.log(formdata);

如何发送:

        // Send to server
        $.ajax({
            url: "../../build/ajaxes/upload-photo.php",
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false,
            success: function (response) {
                console.log(response);
                $.fancybox.close();
            }
        });

共3个答案

匿名用户

这个怎么样?

formdata.append('tags', JSON.stringify(tags));

...相应地,在服务器上使用json_decode来离开它。看,FormData.append的第二个值可以是...

Blob、File或字符串,如果两者都不是,则将该值转换为字符串

在我看来,您的标记数组包含对象(@Musa是正确的,顺便说一句;将此标记设置为数组,然后为其指定字符串属性没有意义;改用普通对象),因此本机转换(使用toString())是不够的。不过,JSON'ing应该能够获得这些信息。

作为旁注,我会将属性分配块重写为以下内容:

tags.push({article: article, gender: gender, brand: brand});

匿名用户

写作作为

var formData = new FormData;
var array = ['1', '2'];
for (var i = 0; i < array.length; i++) {
    formData.append('array_php_side[]', array[i]);
}

您可以通过php接收普通数组post/get。

匿名用户

使用“xxx[]”作为formdata中字段的名称(在您的情况下,您将获得一个-stringized对象数组)

所以在你的循环中

$('.tag-form').each(function(i){
            article = $(this).find('input[name="article"]').val();
            gender = $(this).find('input[name="gender"]').val();
            brand = $(this).find('input[name="brand"]').val();
            this_tag = new Array();
            this_tag.article = article;
            this_tag.gender = gender;
            this_tag.brand = brand;
            //tags.push(this_tag);    
            formdata.append('tags[]', this_tag);
...