簡體   English   中英

角 10 | http 帖子 | 字符串數組追加 FormData

[英]Angular 10 | Http post | String array append FormData

我必須向 api 端點發出 post 請求,但收到錯誤狀態 500。

name: "HttpErrorResponse"
ok: false
status: 500
statusText: "Internal Server Error"

這是我的代碼:

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 應用程序的一個工作示例。 我需要以 angular/typescript 語法轉換此請求:

@JvmSuppressWildcards
@FormUrlEncoded
@POST("APIENDPOINT")
fun addData(
    @Field("auth") auth: String,
    @Field("identifier") identifier: String,
    @Field("selected[]") selected: ArrayList<String>
): Call<ResponseBody>

到目前為止我所知道的:

似乎 angular 不會序列化數據,所以我嘗試了一些硬編碼修復,但這些都沒有奏效:

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[] ,那么我不會出錯,但顯然沒有數據更新,所以我很確定這是一個序列化/解析問題。

這個答案

FormData 的 append() 方法只能接受 string 或 blob 類型的對象。 如果需要附加數組,請使用 JSON.stringify() 方法將數組轉換為有效的 JSON 字符串。

formData.append('selected[]', JSON.stringify(selectedIds));

statusCode 500是內部服務器錯誤,它是服務器端問題。 因此,最好檢查API是否可以接收您的請求。

FormData 的append()方法接受stringblob類型因此您可以使用JSON.stringify()方法( formData.append('selectedIds', JSON.stringify(selectedIds)); )。 所以試試這個:

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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM