首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel:使用multipart-form-data发送值时,为foreach()提供的参数无效

Laravel:使用multipart-form-data发送值时,为foreach()提供的参数无效
EN

Stack Overflow用户
提问于 2018-10-19 06:47:31
回答 1查看 337关注 0票数 0

我正在尝试访问multipart-form-data请求中的数组。

在我的js代码中,我将以这种方式需要的对象添加到formData中:

代码语言:javascript
复制
for (const key in property) {
    if (typeof property[key] !== 'undefined') {
        console.log(key, property[key]);
        formData.append(`property[${key}]`, property[key]);
    }
}

该属性具有数组图像,值是如下所示的数组:

同样在同一个forData中,我发送了我想要处理的图像中的所有数据,在本例中,该属性包含一个对象数组,这些对象是以前存储在数据库中的图像。因此,在我的控制器中,我必须遵循

代码语言:javascript
复制
 // Images that are already in database
 $propertyData = $request->input('property');
 $images = isset($propertyData['images'])? $propertyData['images'] : []
 foreach($images as $i) {
    $image = Image::find((int)$i['id']);
    if ( !is_null($image) ) {
        $image->update($i);
    }
}

但是我得到了错误:Invalid argument supplied for foreach()

我甚至尝试过将javascript代码中的每个图像转换为一个类似于属性的数组,但我得到了相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 07:19:54

不能直接将对象或数组附加到FormData。必须逐个添加键和值。

这样做的一种方法是:

代码语言:javascript
复制
var formData = new FormData;
var arr = ['this', 'is', 'an', 'array'];
for (var i = 0; i < arr.length; i++) {
    formData.append('arr[]', arr[i]);
}

我使用助手函数(请注意,这是在ES6语法中)来完成此操作:

代码语言:javascript
复制
export function appendFormdata(formData, data, previousKey) {
    if (data instanceof Object) {
        Object.keys(data).forEach(key => {
            const value = data[key];
            if (previousKey) {
                key = `${previousKey}[${key}]`;
            }
            if (value instanceof Object && !Array.isArray(value) && !(value instanceof File)) {
                return appendFormdata(formData, value, key);
            }
            if (Array.isArray(value)) {
                value.forEach((val, i) => {
                    return appendFormdata(formData, val, `${key}[${i}]`);
                });
            } else {
                formData.append(key, value);
            }
        });
    }
}

有关更多细节,请参阅:appending array to FormData and send via AJAXConvert JS Object to form data

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52883608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档