我正在使用非常简单的HTML POST
发出form
个请求。请求以form
格式失败,但在Javascript中有效。
这很简单,所以这里几乎是整个表格:
<form method="post" action="[apiUrl]" target="_blank">
<input type="hidden" name="payload" value="[payload]">
<!-- ... -->
</form>
*请注意,[apiUrl]
和[payload]
是注入HTML的变量。
请求失败并带有来自API的自定义消息(似乎无法解析有效负载):
{
"Error": {
"Message": "Noun and Verb are Required Request Parameters",
"ValidationError": false
},
"Result": "ERROR"
}
然而,完全相同的请求在Javascript执行时会成功(我已经使用Axios和jQuery以及Paw进行了测试)。
$.post(this.apiUrl, this.payload, response => {
console.log('Success!', response);
});
payload
只是一个Javascript Object
。变量设置如下:
this.apiUrl = request.url;
this.payload = JSON.stringify(request.parameters);
为什么它会以form
失败?
答案 0 :(得分:4)
当我使用JSON apis分别构建后端(使用Node&amp; Express.js)和前端(Angular.js)时,我遇到了类似的问题。花了12个小时才找到不使用html表单的原因
问题出在后端,当您使用jquery $.post
提交时,Content-type为application/json
但是当您使用html form
提交时,内容类型为application/form-data
您可以使用postman
来测试API,如果您选择的内容类型为form-data
,则api将无效。
因此,要解决此问题,您必须重建后端apis才能与Content-type application/form-data
兼容。
另外在我的情况下,我使用body-parser
节点包来分析表单数据。