我正在尝试将带有主题标签的网址发送到服务器,例如
/example.php?var1=tes#t&var2=value2
如果我在beforeSend函数中跟踪url,我看到该url只是
/example.php?var1=tes
删除了标签和包含主题标签之后的所有内容。如果我在使用$ .get()函数之前将hashtag编码为%23,那么一切都很完美。
这是一个示例代码。
$.ajaxSetup(
{
scriptCharset: "iso-8859-1",
contentType: 'Content-type: text/plain; charset=iso-8859-1',
cache: true,
//zuerst alles encodieren, damit server keine fehler bekommt
beforeSend: function(xhr, data)
{
//wrong url
console.log(data.url);
}
});
//right url
var link = "/example.php?var1=tes#t&var2=value2";
$.get(link).done(function()
{
console.log("done");
})
修改
服务器用iso-8859-1解码url,所以我需要将数据编码为iso。我在beforeSend函数中编写了一个脚本,它自动将url转换为iso,但它无法转换hashtag,因为data.url变量不包含hashtag。所以我需要在$ .ajaxSetup函数中访问完整的url(包括hashtag)。
答案 0 :(得分:2)
将encodeURIComponent()应用于您的网址字符串
答案 1 :(得分:1)
网址无效/格式错误。
主题标签必须是网址的最后一部分。
主题标签不是HTTP请求的部分,因此必须不在其中。
您不能将主题标签放在网址的中间,只有一种模式:
prot://domain/resource?parameter1=value1¶meter2=value2#fragment_identifier
如果以下情况不起作用,则根本不起作用:
/example.php?var1=test&var2=value2#hashval
使用URI引用对其执行检索操作时 标识资源,可选的片段标识符,分隔 由交叉阴影线(“#”)字符组成的URI由附加组成 用户代理在之后解释的参考信息 检索行动已成功完成。因此,事实并非如此 URI的一部分,但通常与URI结合使用。
http://www.w3.org/blog/2011/05/hash-uris/
证明:请求网址 - http://flowl.info/test#test
HTTP请求期间未使用片段标识符(#):
[26 / Sep / 2014:14:11:10 +0000]“GET / test HTTP / 1.1”200 988“ - ”“Mozilla / 5.0(Windows NT 6.1; WOW64; rv :32.0)Gecko / 20100101 Firefox / 32.0“
另一个证明:
将包含<?php phpinfo();
的PHP文件上传到您的服务器上,并在生成的信息中使用#fragment_identifier
...访问它,该哈希值不会被提及一次。 因为对于服务器,它甚至不存在。
答案 2 :(得分:0)
正如@ luigi-belli所建议:应用encodeURIComponent()
或者,移动您的网址查询参数,以便进行如下调用:
$.ajaxSetup({
scriptCharset: "iso-8859-1",
contentType: 'Content-type: text/plain; charset=iso-8859-1',
cache: true,
data: { 'var1' : 'test#t', 'var2' : 'value2' }
//zuerst alles encodieren, damit server keine fehler bekommt
beforeSend: function(xhr, data)
{
//wrong url
console.log(data.url);
}
});
//right url
var link = "/example.php";
$.get(link).done(function()
{
console.log("done");
});
答案 3 :(得分:0)
#之后的字符被视为哈希,而不是查询字符串的一部分。您需要对特殊字符进行编码。您应该使用encodeURIComponent来完成它。
但好处是jQuery在get方法中内置了$ .param()方法,它将为你进行转换。
var link = "/example.php";
$.get(link, { "var1" : "tes#t", "var2" : "value2" }). done(...);