POST请求出现value_error.jsondecode错误的排查与代码优化咨询
问题解答
为什么fetch的body不能直接传JS对象?
fetch的body参数只接受字符串、FormData、Blob这类可被HTTP请求序列化的格式。你直接传普通JS对象时,浏览器无法自动将其转换为后端API要求的JSON格式,加上你设置了Content-Type: application/json,后端会尝试按JSON解析请求体,自然就会抛出"value_error.jsondecode"解码错误。
正确的动态生成请求体方法
先创建包含动态输入值的JS对象,再用JSON.stringify()把对象转换成符合要求的JSON字符串,同时注意API要求的参数名大小写(提供商示例里是小写的prompt,别写成大写Prompt):
async function fetchApi() { // 构建带动态值的请求体对象 const requestBody = { seed: inputSeed.value, prompt: inputPrompt.value // 匹配API要求的参数名 }; const options = { method: "POST", headers: { Authorization: auth, "Content-Type": "application/json", }, // 将对象转为JSON字符串 body: JSON.stringify(requestBody) }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } }
额外注意事项
- 手动拼接JSON字符串很容易出现语法错误(比如引号漏写、逗号错误),用
JSON.stringify()能自动处理这些问题,更可靠 - 严格匹配API要求的参数名大小写,否则后端可能无法识别对应参数
内容的提问来源于stack exchange,提问作者28282733728299919
相关产品推荐
相关产品推荐

