【问题标题】:How to get current URL when using XMLHttpRequest使用 XMLHttpRequest 时如何获取当前 URL
【发布时间】:2012-02-25 13:02:55
【问题描述】:

我有以下代码在 onbeforeunload 事件上调用 count_visit.php。这很好用。但是,当我使用 $_SERVER['REQUEST_URI'] 时,结果是 count_visit.php 而不是真正的 URL。

<script type="text/javascript">
var startime = (new Date()).getTime();
window.onbeforeunload = record_visit;

function record_visit() {
    var x = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
    x.open("GET", "count_visit.php?t=" + (((new Date()).getTime() - startime) / 1000), false);
    x.send(null)
}

即使使用上面的代码,是否有更好的方法来获取当前 URL?还是我需要改一下上面的代码?

【问题讨论】:

  • “真实 URI”是指“包含查询字符串”吗?
  • 即使没有查询字符串。上面的代码放在 visit_length.php 下。所以我希望结果为“visit_length.php”而不是“count_visit.php”。

标签: php onbeforeunload


【解决方案1】:

我怀疑您想要包含 AJAX 的页面的 URI,而不是 AJAX 调用本身 - 但count_visit.php 是正确的 $SERVER['REQUEST_URI'],因为这是您的 AJAX 脚本调用的 URI。

要获取页面 URI,您需要获取 window.location.href,对其进行转义并将其作为 AJAX 调用的参数发送,类似于

x.open("GET", "count_visit.php?t=" + (((new Date()).getTime() - startime) / 1000)+"&url="+escape(window.location.href), false);

在 PHP 中,您必须记录对 $_GET['url'] 的访问

【讨论】:

  • 你可能想要使用encodeURIComponent()而不是escape()
  • 是的(甚至是来自框架的实用功能)。这就是我写“类似”的原因。我希望代码具有指导意义,而不是富有成效,而且我不知道 OP 是否使用以及使用什么 JS 框架。
  • @EugenRieck 它很接近,但我得到的是推荐人而不是实际的 URL。
  • “实际 URL”到底是什么意思?这将为您提供地址栏中的任何内容。您是否一直在通过 AJAX 更改页面?
  • @EugenRieck 抱歉,但您的代码是正确的。我只需要使用 onload 事件而不是 onbeforeunload 事件。谢谢
【解决方案2】:

如果要检索完整的 URI,可以采用两种方式: 首先,由于这不是跨域通信,您可以连接两个服务器变量

$_SERVER['HTTP_HOST'] .  $_SERVER['REQUEST_URI'] 

第二种方式,你可以修改上面的代码,将完整的页面URI作为GET请求的附加变量发送到服务器。

【讨论】:

  • 我想你不明白我的意思。上面的脚本放在 visit_length.php 下,但是当我使用 $_SERVER['REQUEST_URI'] 而不是 visit_length.php (实际 URL) 时,我得到了 count_visit.php
  • 是的,正确的。然后,我提出的第二种方法很适合你。 Eugen Rieck 在上面已经详细描述过。
  • 我仍然没有得到正确的 URL。返回的 URL 是引荐来源网址。
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2013-10-09
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多