【问题标题】:react axios get url encode decode issue反应 axios 获取 url 编码解码问题
【发布时间】:2020-11-30 07:09:12
【问题描述】:

我正在使用 Axios 根据日期范围从服务器获取一些数据。

这是我的示例 Axios 请求

const params = {
  fromdate: encodeURIComponent(datefrom),
};    

axios
      .get(url, {params})

我正在使用以下方法对数据进行编码

encodeURIComponent(_.toString(datefrom))

接受以下模式的服务器

 **Encoded Type:** fromdate: 2020-11-01%200%3A0%3A00

 **Decoded Type:** fromdate: 2020-11-01 0:0:00

但是当我传递到服务器时,我会变得那样

 **Encoded Type:** fromdate: 2020-11-01%200%3A0%3A00

 **Decoded Type:** 2020-11-01%25200%253A0%253A00

我怎样才能得到像这样的解码类型

解码类型:来自日期:2020-11-01 0:0:00

而不是

解码类型: 2020-11-01%25200%253A0%253A00

【问题讨论】:

  • 解码类型现在是双重编码而不是解码。我认为 Axios 正在对请求参数进行编码,所以它应该在查询参数中没有 encodeURIComponent 的情况下工作。

标签: reactjs react-redux axios urlencode


【解决方案1】:

解决这个特定问题的最简单方法是手动编写查询,而不是依赖 Axios 自己的内部结构,这不会做任何错误。 GET 查询中的空间可以描述为+ (more information here)。如果您想使用明确的%20,那么这是您查询的最快方式:

axios.get('/?fromdate=' + encodeURIComponent('2020-11-01 0:0:00'))

【讨论】:

    【解决方案2】:

    让我为您提供一种不同的,也许更简单的方法,通过时间戳(也称为 unix)将日期从客户端传递到服务器:

    客户:

    const params = {
      fromdate: (new Date("2013/09/05 15:34:00").getTime()/1000),
    };    
    
    axios.get(url, {params})
    

    在服务器中:

    const fromdate = new Date(req.params.fromdate * 1000);
    // Parse it back to 2020-11-01 0:0:00 or whatever format you want.
    

    【讨论】:

    • 当您使用 ISO 8601(ish) 日期时间时,在可读性方面有很大优势。除此之外,您的答案假设提出问题的人可以更改 API。
    • 有时你会得到其他方法来解决你的问题:)
    • 您假设甚至可以更改服务器端,这在问题中没有描述
    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多