【问题标题】:JSON data is not recived by the NodeJS expressJs ServerNodeJS expressJs 服务器不接收 JSON 数据
【发布时间】:2017-12-14 05:37:31
【问题描述】:

我的 ajax 请求如下所示

$.ajax({
    url: baseUrl,
    type: 'POST',
    data: JSON.stringify(sendData),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    async: false,
    success: function (msg) {
        alert(msg);
    }
});

其中baseUrl 是一个字符串,sendData 是要发送的对象。

我的问题是我没有按预期在服务器中收到我的数据。我在我的服务器中使用 nodeJs(带有 body-parser 的 expressJs 来解析请求中的 JSON)。

但是,当我使用 Chrome 商店中的 Advanced Rest Client Application 时,我得到了预期的数据。我认为我的客户端代码是错误的。

【问题讨论】:

  • 在检查您的 ajax 请求时,例如chrome 开发控制台,它是否发送 POST 或 OPTIONS 请求?可能是 CORS 问题
  • 为什么要对数据进行字符串化并发送?
  • 带或不带字符串化。服务器没有收到数据
  • petul 是对的。它使用 OPTIONS 而不是 POST。我该如何纠正??

标签: jquery json node.js ajax


【解决方案1】:

通常是跨域问题。 baseURL 和 html 页面是否在同一个域中?

【讨论】:

  • 否,但我已将服务器设置为响应允许跨源
  • chrome 开发控制台显示它使用 OPTIONS 请求而不是 POST。知道如何纠正吗??
  • 尝试使用 'method: "POST"' 而不是 type
【解决方案2】:

我明白问题所在。

当请求跨域资源时,Web 浏览器发送一个带有OPTIONS 的虚拟请求作为 http 方法来检查服务器是否支持跨域请求。该请求称为“预检”。在我的情况下,我为请求正文中不包含 authKey 的任何请求发送 401。因此,当 Chrome 发出第一个预检请求时,它得到了错误的响应。所以 Chrome 没有尝试第二个请求。

我通过设置Access-Control-Allow-Origin 解决了这个问题 每当服务器收到OPTINS 请求时,响应标头中的*

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 2012-08-17
    • 2018-08-28
    • 1970-01-01
    • 2015-07-23
    • 2018-03-20
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多