我正在努力将 angularjs 应用程序转换为 React,并决定使用 axios 进行 API 请求。一切工作正常,除了一些 JSON 类型的响应主体,但布尔值是字符串类型而不是布尔值。它与 angularJs $http 一起工作正常,但某些端点返回这样的结果。
这些模块是 AngularJs + Typescript 2.9.1 + axios 0.19.0
let request = Axios({
...requestConfig,
url: resource, method: 'get', responseType: 'json'
}).then(response => response);
Run Code Online (Sandbox Code Playgroud)
响应主体是
{
some: "true"
}
Run Code Online (Sandbox Code Playgroud)
但我例外
{
some: true
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
[更新]正如菲尔指出的那样,Boolean('false')不起作用。我将代码更新为适用于“true”和“false”的代码,但如果您想涵盖所有可能性,则需要更复杂的函数。
如果 API 的响应完全如下所示:
{
"some": "true"
}
Run Code Online (Sandbox Code Playgroud)
那么axios就没有做错什么。对于库来说,自动解析它们认为合适的值是危险的,只需看看Json.NET 如何处理它们认为看起来像 Datetime 的值即可值即可。
如果 API 返回的有效负载如下所示:
{
"some" : true
}
Run Code Online (Sandbox Code Playgroud)
然后axios应该直接将其解析为布尔值。
我建议你做的就是始终将值解析为布尔值,即使它已经是一个:
let request = await Axios({...requestConfig,
url: resource, method: 'get', responseType: 'json'
});
let someValue = String(request.data.some) == "true";
Run Code Online (Sandbox Code Playgroud)
这适用于Boolean("true")以及Boolean(true)。
| 归档时间: |
|
| 查看次数: |
6358 次 |
| 最近记录: |