2012-02-25 104 views
0

我有以下代碼可以調用onbeforeunload事件的count_visit.php。這很好。但是,當我使用$ _SERVER ['REQUEST_URI']時,結果是count_visit.php而不是真正的URL。如何使用XMLHttpRequest獲取當前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?或者我需要更改上面的代碼?

+0

訪問通過「真正的URI」你的意思是「包括查詢字符串」? – Quentin 2012-02-25 13:04:52

+0

甚至不用查詢字符串。上面的代碼放在visit_length.php下面。所以我想要結果爲「visit_length.php」而不是「count_visit.php」。 – jaypabs 2012-02-25 13:20:06

回答

1

我懷疑你想要的頁面的URI包含AJAX,而不是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']

+0

而不是'escape()'你可能想要使用[encodeURIComponent()](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent) – rodneyrehm 2012-02-25 13:19:03

+0

是的(甚至是一個實用函數框架)。這就是我寫「類似」的原因。我希望代碼具有啓發性,而不是生產性,並且我不知道OP使用的是否和JS框架。 – 2012-02-25 13:21:52

+0

@EugenRieck它很接近,但我得到的是推薦人,而不是實際的網址。 – jaypabs 2012-02-25 13:24:57

-1

如果你想獲取完整的URI,你可以有兩種方式: 首先,這不是跨域通信,可以連接兩個服務器變量

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

方式二,你可以改變上面的代碼並將完整的頁面URI作爲GET請求的附加變量發送到服務器。

+0

我覺得你不明白我的意思。上面的腳本放在visit_length.php下,但是當我使用$ _SERVER ['REQUEST_URI']而不是visit_length.php(實際的URL)時,我得到了count_visit.php – jaypabs 2012-02-25 13:15:18

+0

是的,正確的。然後,我採用的第二種方法很適合你。 Eugen Rieck在上面詳細描述了它。 – 2012-02-25 13:21:42

+0

我仍然沒有得到正確的網址。 URL返回是引薦來源網址。 – jaypabs 2012-02-25 13:29:59