我正在尝试提交 POST 请求,但收到错误状态代码 400,因为我发送的数据格式错误,但我不知道如何格式化。
Web API 期望这种格式(Web API 工作完美,如果我通过 Postman 发送数据,我不会遇到任何问题):
[{ "word": "string", "box": 0 }]
这就是我要发送的:
"["{\"word\": \"Value\", \"box\": 0 }"]"
知道如何格式化吗?
这是简化后的整个代码:
<form onsubmit="handlePostSubmit()" id="formPost">
<div>
<input type="checkbox" id="chk01" name="ckbWord" value="Value" defaultChecked></input>
<label for="chk01"> value</label>
</div>
<button type="submit" form="formPost" value="Submit">Submit</button>
</form>
<script>
function getWords() {
const words = document.forms[0];
var txt = "";
for (var i = 0; i < words.length; i++) {
if (words[i].checked) {
txt += '{"word": "' + words[i].value + '", "box": 0 }';
}
}
return txt;
}
function handlePostSubmit() {
// params.preventDefault();
const words = getWords();
alert(words);
var x = create(words)
.then(() => {
//TODO: Msg of ok or error
alert("Ok")
});
alert(x);
}
async function create(params) {
const response = await fetch("https://localhost:44312/words", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify([params]),
});
if (response.ok) {
const resposta = await response.json();
return resposta;
}
throw new Error('Error to save words');
}
</script>
我认为不需要使用字符串来构建 JSON。
您可以简单地推送对象,如下所示:
const wordsFromDoc = document.forms[0]
const words = []
for (var i = 0; i < words.length; i++) {
if (words[i].checked) {
words.push({ word: words[i].value, box: 0 });
}
}
return words;
然后你可以直接传递它们,然后
JSON.stringify()
它,而不用将其包装在数组中。
const response = await fetch("https://localhost:44312/words", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(params),
});
请注意,您尝试自己创建 json 字符串,并且在连接
,
时缺少 txt
是导致错误的原因。
我们可以修复它,但我认为你应该改变实现它的方式。
我建议使用数组而不是连接字符串。例如:
function getWords() {
const words = document.forms[0];
const wordsArray = [];
for (var i = 0; i < words.length; i++) {
if (words[i].checked) {
wordsArray.push({word: words[i].value, box: 0 });
}
}
return wordsArray;
}
然后再执行
JSON.stringify(param)
我今天也遇到了问题,我使用的解决方案是添加encodeURIComponent,因为我正在构建一个通过 GET 请求发送的 json。
const filter = [{
$or: [{
name: encodeURIComponent(`${model.get('name')}`),
}, {
registered_no_c:`${model.get('company_registration_number_c')}`,
}]
}];
const url = 'Accounts?filter=' + JSON.stringify(filter);