首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角10 \ Http post \ String数组追加FormData

角10 \ Http post \ String数组追加FormData
EN

Stack Overflow用户
提问于 2020-09-15 12:35:29
回答 2查看 1.3K关注 0票数 3

我必须向api端点发出post请求,但我得到了错误状态500。

代码语言:javascript
复制
name: "HttpErrorResponse"
ok: false
status: 500
statusText: "Internal Server Error"

这是我的密码:

代码语言:javascript
复制
var selectedIds = ["31"];
let sendData = new FormData();
sendData.append('auth', this.dataService.REG_AUTH);
sendData.append('identifier', identifier);
sendData.append('selected[]', selectedIds); 

this.http.post<any>('APIENDPOINT', sendData).subscribe(data => {
  console.log(data);
}, error => {  
  console.log(error);
});

问题就在这一行:sendData.append('selected[]', selectedIds);,我不知道如何将数组传递给FormData。

这是我们的android应用程序的一个工作示例。我需要将此请求转换为角/类型转换语法:

代码语言:javascript
复制
@JvmSuppressWildcards
@FormUrlEncoded
@POST("APIENDPOINT")
fun addData(
    @Field("auth") auth: String,
    @Field("identifier") identifier: String,
    @Field("selected[]") selected: ArrayList<String>
): Call<ResponseBody>

到目前为止我所知道的是:

它似乎没有序列化数据,所以我尝试了一些硬编码的修复,但这些都不起作用:

代码语言:javascript
复制
sendData.append('selected%5B%5D', '%2231%22'); 
sendData.append('selected%5B%5D', '31');
sendData.append('selected%5B%5D', 31);
sendData.append('selected%5B%5D', '%5B%2231%22%5D'); 
sendData.append('selected%5B%5D', selectedIds); 
sendData.append('selected%5B%5D', JSON.stringify(selectedIds));

如果我使用selected而不是selected[],那么我就没有错误,但是显然没有更新数据,所以我很确定这是一个序列化/解析问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-15 12:46:47

来自this answer

FormData的append()方法只能接受字符串或blob类型的对象。如果需要追加数组,请使用JSON.stringify()方法将数组转换为有效的JSON字符串。

代码语言:javascript
复制
formData.append('selected[]', JSON.stringify(selectedIds));
票数 2
EN

Stack Overflow用户

发布于 2020-09-15 12:53:07

statusCode 500是内部服务器错误,是服务器端的问题.因此,最好检查API是否可以接收到您的请求。

FormData的append()方法接受stringblob类型,因此可以使用JSON.stringify()方法(formData.append('selectedIds', JSON.stringify(selectedIds));)。所以试试这个:

代码语言:javascript
复制
let selectedIds = ["31"];
let sendData = new FormData();
sendData.append('auth', this.dataService.REG_AUTH);
sendData.append('identifier', identifier);
sendData.append('selectedIds', JSON.stringify(selectedIds)); 

this.http.post<any>('APIENDPOINT', sendData).subscribe(data => {
  console.log(data);
}, error => {  
  console.log(error);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63901962

复制
相关文章

相似问题

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