angular - Why I get error when trying to send JSON in get request?
问题描述
I use angular 10 in my project. I try to send object in get request, so I try to convert to JSON:
getData(dataPlan: Data): Observable<Response<InfoType[]>> {
return this.client.get<Response<InfoType[]>>(environment.baseUrl + '/ctrl/getDataPlan', {
params: {
JSON.stringify(dataPlan)
}
});
}
But I get this error:
Type 'Observable<ArrayBuffer>' is not assignable to type 'Observable<Response<InfoType[]>>'.
Property 'results' is missing in type 'ArrayBuffer' but required in type 'Response<InfoType[]>'.ts(2322)
Any idea why I get error?
解决方案
- 您不应该发送这样的数据,最好使用发布请求。
- 尽管如此,如果您这样做,您会注意到您正在使用 .get() 传递类型<Response<InfoType[]>,并且您的<Response<InfoType[]>可能是您的自定义类型,它将具有results属性作为强制性。
- 但是问题就在这里,您不能以这种方式从get请求中设置您想要的响应类型,因为现在 get 请求将为您提供ArrayBuffer,但是您强制它返回<Response<InfoType[]>您的响应无法做到。这就是为什么它向您显示错误。
解决方案:
- 从return this.client.get<Response<InfoType[]>>(en...中删除<Response<InfoType[]>它应该看起来像return this.client.get(en...
不过,如果你想传递类型,你可以在订阅这个 observable 的地方进行。
例如:
getData(dataPlan).subscribe((result:Response<InfoType[])=>
{
// result from request
}
推荐阅读
- google-cloud-platform - GCP Terraform google_project_iam_member 不会将手动添加的角色删除到成员
- typescript - '{ pathname: string; 类型的参数 装运:TSshipment;}' 不可分配给“To”类型的参数
- hashicorp-vault - Vault 中转引擎自动开封在启动时未通过 VAULT_TOKEN?
- reactjs - 在 API 调用后反应重新渲染导致不良 UI 显示一瞬间
- python - 在 django 中,如何返回多对多连接的另一端?
- azure - 如何使用多个相互通信的应用服务设置 Azure 应用程序网关
- javascript - 使用 const 替换 attr 值
- excel - 比较两个工作表并将匹配项和唯一值粘贴到同一工作簿的不同工作表中
- c - 为什么 GCC -O0 转换按位与并乘以分支?
- xml - 使用 XSLT 将密钥添加到 XML 中的所有子节点到 MS Access 传输