表单提交与Javascript POST请求

时间:2017-11-16 14:27:22

标签: javascript jquery html forms

我正在使用非常简单的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失败?

1 个答案:

答案 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节点包来分析表单数据。