在我的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