【问题标题】:Sending "%" to an API with JavaScript使用 JavaScript 向 API 发送“%”
【发布时间】:2014-12-09 09:38:15
【问题描述】:

在我们的 RESTful API 中,我们使用 RQL 来解析 URL-s 并从中构建查询。这是一个查询示例:

http://www.example.com/resource?resource.name~=%Some name%

转换为LIKE 运算符。

然后,在我们的前端,我们实现了一个搜索字段,其中的更改会触发一个 ajax 请求:

'http://www.example.com/resource?resource.name~=%' + query + '%'

当然,有一个错误 - 每个带有“%”的特殊组合都会在服务器端转换为一个字符,导致查询不返回任何结果。

如何解决?

我尝试encodeURIComponent ? 之后的所有内容,但它变得更糟,例如 resource.name~%3D%25befr%25 其中“befr”作为查询字符串。

我不知道如何解决这个问题。

【问题讨论】:

  • 您面临什么服务器端错误?未知问题很难找到解决方案。
  • 提示!使用<> 而不是~=,你需要添加或修剪% 吗?
  • 正如我所说:“每个带有“%”的特殊组合都会在服务器端转换为一个字符,导致查询不返回任何结果。”。例如,尝试搜索以“b”开头的内容会转到包含%b 的 URL,这是表示字符的特殊组合
  • 可以在MYSQL端修剪SELECT TRIM(BOTH '%' FROM 'query');
  • 好吧,我假设您正在尝试为有问题的服务器寻找解决方法。与此相反,服务器似乎做了正确的事情:按照 URI 规范要求处理 % 转义序列。

标签: javascript php ajax urlencode restful-url


【解决方案1】:

查询字符串的组成部分是键名和值。

?key=value&key=value

不要对= 字符进行编码。它们不是组件的一部分,而是将组件分开。

var url = 'http://www.example.com/resource?' +
    encodeURIComponent("resource.name~") +
    "=" + 
    encodeURIComponent("%" + query + "%");

【讨论】:

  • 是的,难以置信,但确实就这么简单。
【解决方案2】:

尝试简单地将 % 替换为其 URLEncoded 等效的“%25”

【讨论】:

  • 你是对的。但是,我发现@Quentin 的解决方案更好,因为它使用函数而不是硬编码字符串。但仍然为这个提示加一个。
  • 这适用于这个特定的查询(因为它没有任何特殊字符)但在一般情况下是一种糟糕的方法。
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2010-10-02
  • 2011-09-05
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多