例如,如果我输入 URL:
http://www.foo.com/page.php?parameter=kickme#MOREURL
然后在服务器上没有部分:#MOREURL
是否可以在没有 jQuery AJAX 的情况下将这些部分发送或获取到服务器?
例如,如果我输入 URL:
http://www.foo.com/page.php?parameter=kickme#MOREURL
然后在服务器上没有部分:#MOREURL
是否可以在没有 jQuery AJAX 的情况下将这些部分发送或获取到服务器?
不,它仅对浏览器可用,因此您必须使用 Javascript 来处理它。服务器无法读取它。
说明:
基本上页面 URL 的散列组件(# 符号后面的部分)仅由浏览器处理 - 浏览器从不将其传递给服务器。遗憾的是,这是 HTML 标准的一部分,无论您使用的是 IE 还是任何其他浏览器(就此而言,PHP 或任何其他服务器端技术)都是一样的。
以下是维基百科对此的描述:
片段标识符的功能与 URI 的其余部分不同:即,它的处理完全在客户端进行,没有服务器的参与。当代理(例如 Web 浏览器)从 Web 服务器请求资源时,代理将 URI 发送到服务器,但不发送片段。而是代理等待服务器发送资源,然后代理根据分片值对资源进行处理。在最常见的情况下,代理将网页向下滚动到具有等于片段值的属性字符串的锚元素。其他客户端行为是可能的
https://www.rfc-editor.org/rfc/rfc2396#section-4
当使用 URI 引用对标识的资源执行检索操作时,可选的片段标识符与 URI 用交叉线(“#”)字符分隔,由检索后由用户代理解释的附加引用信息组成行动已成功完成。因此,它不是 URI 的一部分,但经常与 URI 结合使用。
我想延长的原因,答案为什么片段不被发送到服务器。因为这是有意的和期望的行为。让我们看看整个 URL 字符串。
/path/to/element?query=string&for=server#?optional=fragment&for=browser
<----- URI ----> <---- QUERY STRING ---> <----- FRAGMENT STRING ------>
URI唯一指定从服务器获取的资源
QUERY定义服务器对资源执行的操作
FRAGMENT控制浏览器(应用程序)行为。Fragment 应该用于存储应该对用户可见的应用程序状态,以便用户可以将链接发送给另一个用户以获得相同的应用程序状态。
Fragment 是 URL free 的唯一部分,可以让您透明地实现单页 Web 应用程序(例如可以在您的手机上离线运行)。 因此它不能被发送到服务器。
散列组件不会传递到服务器,但它广泛用于客户端。具体来说,在单页应用程序中,哈希后面的文本用于将应用程序的状态表示为不同的路由。因此,发生的情况是:当用户通过单击锚标记在页面上的任何位置导航时,遵循对“主页”页面以及包括客户端路由逻辑(如路由器)的附加 js 文件的初始请求,仅更改哈希组件后面的 URL 部分。这可以防止向服务器发出 GET 请求,并且响应此 'onhashchange' 事件,可以根据确切的路由更新单页应用程序的内容。