$(document).ready(function () {
let url = "https://translate.yandex.net/api/v1.5/tr.json/detect?key=trnsl.1.1.20150402T131655Z.e753695703b45806.bda2fd6beb5bd56a62f0034352aaebbdba3f0952&text=hey";
let res = fetch(url, {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
})
});
});
这是我的要求。看起来GET
,对吧?问题是,如果我尝试将至少一个参数推送到 Body 中,那么请求会返回Bad Request
.
let url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
let res = fetch(url, {
method: 'POST',
body:JSON.stringify({key:"trnsl.1.1.20150402T131655Z.e753695703b45806.bda2fd6beb5bd56a62f0034352aaebbdba3f0952", lang:"en-ru", text:"hello"}),
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
})
}).then(ok=>console.log(ok.json()));
该文档有一个示例,其中它本身URL
具有除text
. 好的,所以我做到了。仍然不起作用:
let url = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T131655Z.e753695703b45806.bda2fd6beb5bd56a62f0034352aaebbdba3f0952&lang=en-ru";
let res = fetch(url, {
method: 'POST',
body:JSON.stringify({text:"hello"}),
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
})
}).then(ok=>console.log(ok.json()));
明确设置正文,就像他们在文档中一样:
let url = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T131655Z.e753695703b45806.bda2fd6beb5bd56a62f0034352aaebbdba3f0952&lang=en-ru";
let res = fetch(url, {
method: 'POST',
body:'text:hello',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
})
}).then(ok=>console.log(ok.json()));
您可以在控制台中查看。我究竟做错了什么?我知道在 POST 中,参数应该在正文中,而不是在查询字符串中?
而且这似乎不是字符数的限制——我肯定还没有达到100万
感谢@UstyantsevBoris,我的案例的答案很简单:你需要写 body:'text=hello'。等号而不是冒号。
更新:感谢@Grundy,我找到了完整的答案。
这是一个工作示例:
对于
Content-Type: application/x-www-form-urlencoded
,正文必须在表格中指定key1=value1&key2value2
。关于 POST 的内容类型:link