如何使用Async/Await Fetch以text/html类型POST独立参数而非对象?
解决方案
要实现发送不带外层大括号的独立键值对文本,你需要手动格式化数据内容,而非使用JSON.stringify()(它会自动给对象添加外层大括号)。具体修改如下:
$(document).on('click', '#update', async () => { try { // 构造数据对象 const postData = { "country": getCookie("country"), "city": getCookie("city").replace(/"/g, ""), "action": 1, "csrfmiddlewaretoken": $('input[name=csrfmiddlewaretoken]').val() }; // 手动格式化为不带外层大括号的键值对文本 const bodyContent = Object.entries(postData) .map(([key, value]) => `"${key}": "${value}"`) .join(',\n '); const response = await fetch("/getupdate",{ method:'POST', headers:{ 'Content-Type':'text/html; charset=utf-8' }, body: bodyContent // 使用格式化后的文本作为请求体 }); } catch (error){ console.log(error) } });
说明
Object.entries(postData)将对象转换为[键, 值]的数组形式,比如[["country", "US"], ["city", "Miami"], ...]map方法把每个键值对格式化为"key": "value"的字符串join(',\n ')用逗号加换行缩进拼接所有字符串,最终生成你期望的格式- 保持
Content-Type: text/html; charset=utf-8不变,确保后端能识别请求体格式
内容的提问来源于stack exchange,提问作者Majoris
相关产品推荐
相关产品推荐

