【问题标题】:Unable to send POST request via HTTP in Angular 4无法在 Angular 4 中通过 HTTP 发送 POST 请求
【发布时间】:2017-05-27 05:06:57
【问题描述】:

我正在通过后端的 REST api 构建一个小型 Angular 前端支持,但我遇到了一个非常奇怪的问题:执行 http.post(url, data, params) 没有发生任何事情(没有迹象表明请求曾经访问过网络服务器,在 Chrome 开发者工具中,绝对没有记录请求,这与 this.http.get() 请求相反,后者适用于同一服务器上的 URL)。

export class RestComponent {

    constructor ( private http: Http ) {}
    sendStuff() {
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });

        this.http.post('http://localhost:3021/api/data', {'data': 3}, options)
            .catch(this.handleError);
    }
}
  • 在服务器上启用了 CORS
  • URL 上的 this.http.get 可以正常工作
  • 服务器日志中没有证据表明请求曾经发送过
  • Chrome 开发者工具中没有证据表明请求已发送(没有此类发布请求)
  • 在 .post() 调用之前在方法中记录内容表明一切都符合预期(标头、数据等)
  • 在 Postman 中复制请求(相同的标头和数据)
  • 也尝试过对数据进行字符串化
  • 错误处理程序执行一些简单的日志记录,但未触发

我觉得很愚蠢,因为它一定是相当明显的东西,但它却让我无法理解。我创建了一个简单的组件,它只有两种方法,一种通过 post 发送硬编码数据,另一种通过 get 获取硬编码的 json,第二种方法有效,但第一种方法无效。

不胜感激。

谢谢!

【问题讨论】:

标签: javascript rest angular


【解决方案1】:

本质上你只是创建了一个 observable,而 Observable 本质上是惰性的。只有当有人订阅他们时,他们才会收到呼叫/发出。因此,您必须调用 subscribe 从它返回的 Observable 以使您的代码正常工作。除此之外一切似乎都很完美。

sendStuff() {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post('http://localhost:3021/api/data', {'data': 3}, options)
      .catch(this.handleError)
      .subscribe(
       (data) => console.log(data)
    );
}

【讨论】:

  • 你完全正确!!!谢谢!额外的问题:有没有一种无需订阅即可调用 post 的方法(例如:是否有类似的方法不返回 Observable?) - 在这种情况下,除了错误和可能的错误代码之外,它是一个“即发即弃”的调用我对回复不感兴趣。
  • @AndreiDascalu 您必须至少订阅一次才能执行/调用可观察函数一次。您可以将订阅保持空白,这取决于您。
【解决方案2】:

没有可供我们查看的服务器代码,但请确保将路由设置为期待内容类型 application/json,因为默认情况下,发布路由将期待发布数据,具体取决于您为服务器使用的技术。

也可以尝试做一个相对路径:.post('/api/data')

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多