微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐