javascript – 为什么要对Jquery Ajax URL进行双重编码

在我的JS中,我使用jQuery ajax函数.

这是它的样子:

$.ajax({
   url: "somepage/" + keyword + "/" + xyz + "/" + abc + "/getbla",
(...)

如果’keyword'(= textfield的值)包含’#’,则此功能不再起作用.我们都知道,URL只会被解析,直到#和#后面的其余部分将用于锚点.

所以我修改了ajax函数:

$.ajax({
   url: "somepage/" + encodeURIComponent(keyword) + "/" + xyz + "/" + abc + "/getbla",
(...)

这也不起作用,但在控制台中我可以用#而不是#看到完整的URL.

好吧这接近我正在寻找的,但请求仍然不起作用 – 我不知道为什么 – 这就是为什么我在这里问.

我在textfield(= keyword)中键入#,并且请求完全正常.
我的php后端正在发回我正在寻找的数据.

所以这是我的最终解决方案:

$.ajax({
   url: "somepage/" + encodeURIComponent(encodeURIComponent(keyword)) + "/" + xyz + "/" + abc + "/getbla",
(...)

这就是PHP函数的样子:

if ($_GET['anyparam'] == 'getbla') {

    $searchString = array(
        'keyword' => trim($_POST['keyword']),
        'xyz' => trim($_POST['xyz']),
        'abc' => trim($_POST['abc'])
    );

    echo json_encode($this->dataBaseFunctions->searchResult($searchString['keyword'], $searchString['xyz'], $searchString['abc']));
  }

问题:为什么我必须对URL进行双重编码?

最佳答案 我的猜测是你的使用url重写,所以初始请求通过并且#被解码,并且在散列哈希之后重定向所有内容.

对于双重编码,第一个请求将解码为#重定向到#

如果您正在使用mod_rewrite,请查看https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_b

点赞