2010-02-26 186 views
24

我需要訪問JavaScript變量PHP。下面的代碼我目前正試圖,這是不工作的精簡版本:從PHP訪問JavaScript變量

<script type="text/javascript" charset="utf-8"> 
    var test = "tester"; 
</script> 

<?php 
    echo $_GET['test']; 
?> 

我是一個完全新的JavaScript和PHP,所以我會很感激的任何建議。

UPDATE:好的,我猜我簡化了太多。我想要做的是創建一個表單,提交時會更新Twitter狀態。我的表單工作正常,但我還想添加地理位置數據。由於我使用Javascript(特別是Google Geolocation API)獲取位置,因此當我提交表單時,如何使用PHP訪問該信息?

+1

閱讀:http://stackoverflow.com/questions/7016701/creating-jquery-ajax-requests-to-a-php-function/7016795#7016795 – NullUserException 2011-09-22 20:36:45

回答

31

簡短的回答是你不能

我不知道任何PHP語法,但我可以告訴你的是PHP在服務器上執行,JavaScript在客戶端(在瀏覽器上)執行。

你正在做一個$ _GET,這是用來retrieve form values

內置的$ _GET函數是用來收集與方法=「獲得」一種形式的值。

換句話說,如果你的頁面上,你有:

<form method="get" action="blah.php"> 
    <input name="test"></input> 
</form> 

你$ _GET通話將檢索在輸入字段中的值。

那麼如何從JavaScript中檢索值?

嗯,你可以在一個隱藏的表單字段堅持的JavaScript值...

<script type="text/javascript" charset="utf-8"> 
    var test = "tester"; 
    // find the 'test' input element and set its value to the above variable 
    document.getElementByID("test").value = test; 
</script> 

... elsewhere on your page ... 

<form method="get" action="blah.php"> 
    <input id="test" name="test" visibility="hidden"></input> 
    <input type="submit" value="Click me!"></input> 
</form> 

然後,當用戶點擊提交按鈕時,他/她會發出「GET」請求等等.php,發送'test'中的值。

+0

謝謝,我已經更新了我的問題,以澄清我試圖實現的目標。你認爲上述解決方案(不可見的表單域)仍然是最好的解決方案嗎? – 2010-02-26 01:51:45

+2

你也可以使用XHR來加載你的頁面並把你的變量放到你自己的頁面中。這將刪除表單提交... basiclaly,你會加載網址「asdf.php?test =」+ test.value – Warty 2010-02-26 03:14:31

+1

@Chris Armstrong當然,這是一個很好的解決方案。但是,我不知道有多少數據,並且我相信GET請求有大約2kb數據的限制(沒有研究,只是一個假設)。您可能想考慮使用POST而不是GET來發送表單數據。另外,這樣數據不會出現在瀏覽器的URL字段中。 還有其他值得考慮的事情 - 您可以在頁面加載時設置地理位置數據,但如果用戶點擊「提交」時處於不同位置,該怎麼辦?在這種情況下,您可能希望使用javascript來提交表單:http://bit.ly/qOEhx – Pandincus 2010-02-27 01:34:57

2

_GET訪問查詢字符串變量,測試不是查詢字符串變量(PHP不以任何方式處理JS)。你需要重新思考。你可以做一個PHP變量$測試,並做類似:

<?php 
$test = "tester"; 
?> 
<script type="text/javascript" charset="utf-8"> 
    var test = "<?php echo $test?>"; 
</script> 

<?php 
    echo $test; 
?> 

當然,我不知道爲什麼你要這樣,所以我不知道最好的解決方案。

編輯:正如其他人已經指出,如果JavaScript變量是真正生成在客戶端上,您將需要AJAX或表單將其發送到服務器。

+0

如何使它成爲查詢字符串變量?或者我需要使用不同的php方法? – 2010-02-26 01:36:55

+0

您可以使用method =「GET」提交HTML表單。 – 2010-02-26 01:38:58

0

JS ist基於瀏覽器,PHP是基於服務器的。您必須生成一些基於瀏覽器的請求/信號才能將JS中的數據導入到PHP中。看看Ajax

4

由於JavaScript是客戶端語言,PHP是服務器端語言,因此您需要將變量物理地推送到PHP腳本,方法是在PHP腳本的頁面加載中包含變量(script.php ?var = test),這與JavaScript沒有任何關係,或者每次變量發生變化時都通過AJAX/AHAH調用將變量傳遞給PHP。

如果你確實想下去了第二條路徑,你會看XMLHttpRequest的,或我的偏好,jQuerys Ajax調用:http://docs.jquery.com/Ajax

2

如果數據顯示給用戶,做了重新定位:

<script language="JavaScript"> 
    var tester = "foobar"; 
    document.location="http://www.host.org/myphp.php?test=" + tester; 
</script> 

或iframe中:

<script language="JavaScript"> 
    var tester = "foobar"; 
    document.write("<iframe src=\"http://www.host.org/myphp.php?test=" + tester + "\"></iframe>"); 
</script> 

如果不需要用戶輸出,產生具有寬度= 0和高度= 0的iframe中。

1

那麼GET的問題是,如果用戶有一些知識,用戶可以自己更改值。我寫這使PHP能夠以檢索從Javascript的時區:

// - 的index.php

<?php 
    if (!isset($_COOKIE['timezone'])) { 
?> 
<html> 
<script language="javascript"> 
    var d = new Date(); 
    var timezoneOffset = d.getTimezoneOffset()/60; 
    // the cookie expired in 3 hours 
    d.setTime(d.getTime()+(3*60*60*1000)); 
    var expires = "; expires="+d.toGMTString(); 
    document.cookie = "timezone=" + timezoneOffset + expires + "; path=/"; 
    document.location.href="index.php" 
</script> 
</html> 
<?php 
} else { 
    ?> 

    <html> 
    <head> 
    <body> 

    <?php 
    if(isset($_COOKIE['timezone'])){ 
    dump_var($_COOKIE['timezone']); 
    } 
} 
?> 
2

嘗試添加這對您的js函數:

var outputvar = document.getElementById("your_div_id_inside_html_form"); 
    outputvar.innerHTML='<input id=id_to_send_to_php value='+your_js_var+'>'; 

在後來HTML:

<div id="id_you_choosed_for_outputvar"></div> 

這個div將包含JS變種通過的形式傳遞到另一個JS功能或PHP,R記住把它放在你的html表格中! 這個解決方案對我來說工作得很好。

在您的具體地理位置情況下,你可以嘗試添加以下的功能showPosition(位置):

var outputlon = document.getElementById("lon1"); 
    outputlon.innerHTML = '<input id=lon value='+lon+'>'; 
    var outputlat = document.getElementById("lat1"); 
    outputlat.innerHTML = '<input id=lat value='+lat+'>'; 

後來這些DIV添加到您的HTML表單:

<div id=lat1></div> 
<div id=lon1></div> 

在這些div的你」將經緯度作爲你的php表單的輸入值,你最好使用css隱藏它們(如果使用的話,只顯示地圖上的標記),以避免用戶在提交之前更改它們,並將數據庫設置爲接受float長度爲10,7的值。

希望這會有所幫助。