代码之家  ›  专栏  ›  技术社区  ›  Donnie

表单提交与Javascript POST请求

  •  3
  • Donnie  · 技术社区  · 8 年前

    我正在做一个 POST 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);
    

    为什么它作为一个 类型 ?

    1 回复  |  直到 8 年前
        1
  •  5
  •   artgb    8 年前

    当我分别使用JSONAPI构建后端(使用Node&Express.js)和前端(Angular.js)时,我遇到了类似的问题。花了12个小时才找到不使用html表单的原因。
    当您使用jquery提交时,问题出现在后端 $.post ,内容类型为 application/json 但是当您使用html提交时 form 内容类型为 application/form-data .

    您可以使用 postman ,如果将内容类型选择为 form-data 那个api不起作用。

    因此,为了解决这个问题,您必须重建后端API,使其与内容类型兼容 申请/表格数据 .

    body-parser 用于分析表单数据的节点包。