【问题标题】:how to send new request in angular如何以角度发送新请求
【发布时间】:2019-09-09 19:02:23
【问题描述】:

我是角度方面的新手,所以请理解。 有没有人可以帮助我弄清楚我的获取请求有什么问题。 问题是我只从休息后端检索一次数据数组。或者它似乎只是这样工作。 init 请求获取正确的空数组(服务器没有记录),但在该请求之后,我在后端放置了一些记录,并且在套接字事件操作之后,由于 angular.即使在后端更改了数据,请求响应也与之前的空数组相同。我厌倦了尝试更改/设置 Expired、Cache-Control 等标头。尝试使用 promise 或 observable 来获取这些内容。

我没有看到任何用于此的缓存方法。

如果我在浏览器中打开另一个选项卡并输入相同的 url,那么我会通过数组中的一条记录获得正确的数据。

有没有遇到过类似问题的人?我只在 google 中发现如何只发送一个请求;d 但这不是我需要的。

我还尝试使用页面上的按钮触发该操作,该按钮具有相同的休息 url 以及其他正确的 url,结果是一样的: - 获取数据,在控制台日志中呈现,在浏览器网络中有请求和响应 - 几秒钟后,我单击了按钮,数据在 console.log 中呈现,但网络选项卡中没有请求和响应。所以对我来说,看起来角度只发送一个请求,然后以某种方式响应在缓存中。但正如我提到的,我没有使用缓存。

有什么想法吗?

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ExtApiService {

  baseUrl: string = 'https://exampledomain.dev/public/inventory?id=testid';

  constructor(private httpClient: HttpClient) { }

  public getDonations() {

    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        'Cache-Control': 'no-store',
        'Expires': '0'
      })
    };

    return this.httpClient.get(this.baseUrl, httpOptions);

  }
}

当我输入不正确的 url 时,我得到的唯一正确响应然后每个带有响应的请求都在网络选项卡中可见。

我想知道如何强制任何请求。

哦,我没有提到在刷新角度页面后会有从后端添加的记录。

此外,我忘记与您分享有关操作的内容(但我认为这很清楚,无需更改):

getData() {
        this.extApi.getDonations().subscribe( data => {
            console.log("MY OWN DATA CALL");
            console.log(data);
        });
    }

I wrote some form to test requests with api, if 200 then only one call, if 404 then as many as I can click

更新

我在以下位置找到了缓存请求: this.httpClient.handler.chain.interceptor.transferState.store 还有像这样的属性: this.httpClient.handler.chain.interceptor.isCacheActive = true

我无法将该属性设置为 false,因为处理程序是私有的,我无法从代码中更改它。

之后我找到了话题:

How to disable caching with HttpClient get in Angular 6 但是更改标题并没有帮助。有谁更熟悉拦截器和缓存请求?

将元标头添加到索引后更新 2:

由页面上的按钮触发的请求可以正常工作并以正确的值响应(生成在网络选项卡中可见的新请求)但是组件中的 this.httpClient 在被 ngOnChange() 之类的代码触及时仍返回缓存的响应

知道我还能尝试什么吗?

【问题讨论】:

  • 你是手动调用getData方法吗?
  • getData 被页面上的 html 按钮触发

标签: http request angular7 http-get


【解决方案1】:

添加html内容后,我好像开始一一收到正确的请求了:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

我不明白为什么在发送请求时它不能与 httpOptions 一起工作,但最重要的是它现在正在工作。

我希望这个话题能帮助遇到同样问题的人。

【讨论】:

    【解决方案2】:

    我开始使用 isCacheActive 进行研究,并获得了该页面:

    how does Angular HttpInterceptor get called?

    之后我开始检查该代码,我注意到只有 GET 激活了该缓存,因此我将请求从 GET 更改为 POST,现在看起来它开始工作了。

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 2023-04-08
      • 2019-10-10
      • 2019-12-04
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      相关资源
      最近更新 更多