कोणीय 10 | Http पोस्ट | स्ट्रिंग सरणी परिशिष्ट FormData
मुझे एक एपि समापन बिंदु के लिए एक पोस्ट अनुरोध करना होगा, लेकिन मुझे एक त्रुटि स्थिति 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);मेरे पास कोई विवरण नहीं है कि कैसे फॉर्मडैट के लिए एक सरणी पास करें।
यह हमारे एंड्रॉइड ऐप से एक कार्यशील उदाहरण है। मुझे इस अनुरोध को कोणीय / टाइपस्क्रिप्ट सिंटैक्स में परिवर्तित करने की आवश्यकता है:
@JvmSuppressWildcards
@FormUrlEncoded
@POST("APIENDPOINT")
fun addData(
@Field("auth") auth: String,
@Field("identifier") identifier: String,
@Field("selected[]") selected: ArrayList<String>
): Call<ResponseBody>
मैं अब तक क्या जानता हूं:
ऐसा लगता है कि कोणीय डेटा को अनुक्रमित नहीं करता है, इसलिए मैंने कुछ हार्डकोड फिक्स की कोशिश की, लेकिन इनमें से किसी ने भी काम नहीं किया:
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[], तो मुझे कोई त्रुटि नहीं मिलती है, लेकिन जाहिर है कि कोई डेटा अपडेट नहीं किया गया है, इसलिए मुझे पूरा यकीन है कि यह एक सीरीज़ / पार्सिंग मुद्दा है।
जवाब
से इस उत्तर :
फॉर्मडाटा का एपेंड () विधि केवल स्ट्रिंग या ब्लॉब प्रकार की वस्तुओं को स्वीकार कर सकती है। यदि आपको सरणी को जोड़ने की आवश्यकता है, तो अपने सरणी को एक वैध JSON स्ट्रिंग में बदलने के लिए JSON.stringify () विधि का उपयोग करें।
formData.append('selected[]', JSON.stringify(selectedIds));
statusCode 500आंतरिक सर्वर त्रुटि है, और यह सर्वर साइड समस्या है। इसलिए, यह जांचना बेहतर है कि APIक्या यह आपके अनुरोध को प्राप्त कर सकता है या नहीं।
FormData की append()विधि स्वीकार stringया blobटाइप करें ताकि आप 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);
});