例如,如果我在 URL 中键入:
http://www.foo.com/page.php?parameter=kickme#MOREURL
那么在服务器上就没有 #MOREURL 这一部分。
是否有可能在没有使用 jQuery AJAX 的情况下将这些部分发送或获取到服务器?
是否有可能在没有使用 jQuery AJAX 的情况下将这些部分发送或获取到服务器?
不,这只能在浏览器中使用,所以您需要使用Javascript来处理它。服务器无法读取它。
解释:
基本上,页面URL的哈希组件(#符号后面的部分)仅由浏览器处理 - 浏览器从不将其传递给服务器。遗憾的是,这是HTML标准的一部分,无论您是否使用IE或任何其他浏览器(以及PHP或任何其他服务器端技术),都是相同的。
这是维基百科对此的解释:
片段标识符与URI的其余部分功能不同:即其处理是完全由客户端完成,服务器不参与。当代理(例如Web浏览器)从Web服务器请求资源时,代理将URI发送到服务器,但不发送片段。相反,代理等待服务器发送资源,然后根据片段值处理资源。在最常见的情况下,代理将Web页面滚动到具有属性字符串等于片段值的锚元素。其他客户端行为也是可能的。
/path/to/element?query=string&for=server#?optional=fragment&for=browser
<----- URI ----> <---- QUERY STRING ---> <----- FRAGMENT STRING ------>
URI唯一地指定从服务器获取的资源。
查询定义服务器对资源执行的操作。
片段控制浏览器(应用程序)的行为。片段应该用于存储应用程序状态,以便用户可以将链接发送给另一个用户以获得相同的应用程序状态。哈希组件不会传递到服务器,但在客户端广泛使用。特别是在单页应用程序中,哈希后面的文本用于表示应用程序的状态作为不同路由。因此,发生的情况是:在向服务器发出初始请求并提供“主页”页面以及包括客户端路由逻辑(如路由器)的其他js文件之后,每当用户通过单击锚标记在页面上导航到任何位置时,仅更改跟随哈希组件的URL部分。这可以防止向服务器发送GET请求,并响应此“onhashchange”事件,可以根据确切的路由更新单页应用程序的内容。
urlencode('#')
转换为“%23”,然后再次使用urldecode('%23')
转换为“#”,以便将其传输到服务器。这不需要JavaScript,但需要PHP。如果您也不想使用PHP,可以手动在HTML代码中编写“%23”;-) - user1322720%23
将会被视为值的一部分,例如?foo=bar%23what
,服务器会将其解释为 $foo = 'bar#what'。请注意,此时哈希标记不会生效。 - Oliver Williams#
后面的部分没有被发送到服务器。 - Binita Bharati