当jQuery ajax请求中包含#时,URL中断

URL breaking when it contains # in jQuery ajax request

本文关键字:URL 中断 包含 jQuery ajax 请求      更新时间:2023-09-26

当我用jquery Ajax请求一个包含#符号的url时,#之后的url字符串会被截断。例如:

http://somesitem.com/?name=Some#thing

当我在firebug中看到这个url被请求时,我看到所有被提交的都是:

http://somesitem.com/?name=Some

我尝试使用encodeURI函数,但没有成功。

关于如何提交包含#的整个字符串,有什么提示吗?

encodeURI不会删除"#"。您需要使用encodeURIComponent

encodeURIComponent('Some#thing')

这应该会产生这样的东西:

Some%23thing

尝试将"#"替换为"%23"。

这可能是因为#字符有特殊含义。这基本上是一个保留的角色。我可能只是建议你用一个不同的角色来代替你所用的角色。

片段标识符永远不会传递给服务器。如果您想将其发送到服务器,则需要首先将现有片段转换为标准url参数。

var url = window.location;
//url = http://somesitem.com/?name=Some
url += '&hash='+window.location.hash;
//url = http://somesitem.com/?name=Some&hash=thing
$.get(url);

片段标识符的功能与URI:即它的处理完全是客户端的,没有来自服务器的参与——当然,服务器通常会提供帮助以确定MIME类型,并且MIME类型确定碎片处理当代理(如Web浏览器)从Web服务器请求资源,代理将URI发送到服务器,但不发送片段。相反,代理等待服务器发送资源,然后代理处理根据文档类型和片段值的资源

http://en.wikipedia.org/wiki/Fragment_identifier

http://api.jquery.com/category/selectors/

JQuery文档中的特殊字符包括#

它说在JQuery中使用两个''来转义(我在javascript中只相信一次)。