Доступ к переменной JavaScript из PHP
Мне нужно получить доступ к переменной JavaScript с PHP. Здесь урезанная версия кода, который я сейчас пытаюсь, который не работает:
<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
Короткий ответ вы не можете.
Я не знаю никакого синтаксиса PHP, но я могу сказать, что PHP выполняется на сервере, а JavaScript выполняется на клиенте (в браузере).
Вы делаете $_GET, который используется для извлекать значения форм:
Встроенная функция $_GET используется для сбора значений в форме с методом = "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" на blah.php, отправляя значение в "тесте".
Ответ 2
Поскольку JavaScript - это язык на стороне клиента, а PHP - это серверный язык, вам нужно будет физически нажать эту переменную на PHP script, либо включив переменную в загрузку страницы PHP скрипт ( script.php? var = test), который действительно не имеет никакого отношения к JavaScript, или передавая переменную в PHP через вызов AJAX/AHAH каждый раз, когда изменяется переменная.
Если вы хотите перейти по второму пути, вы будете искать XMLHttpRequest или мои предпочтения, jQuerys Ajax вызывает: http://docs.jquery.com/Ajax
Ответ 3
_GET обращается к строковым переменным запроса, тест не является переменной запроса (PHP не обрабатывает JS каким-либо образом). Вам нужно переосмыслить. Вы можете сделать PHP-переменную $test и сделать что-то вроде:
<?php
$test = "tester";
?>
<script type="text/javascript" charset="utf-8">
var test = "<?php echo $test?>";
</script>
<?php
echo $test;
?>
Конечно, я не знаю, зачем вам это нужно, поэтому я не уверен, что это лучшее решение.
РЕДАКТИРОВАТЬ: Как отметили другие, если переменная JavaScript действительно создана на клиенте, вам понадобится AJAX или форма для отправки на сервер.
Ответ 4
Если вы показываете данные пользователю, выполните перенаправление:
<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>
Если вам не нужен пользовательский вывод, создайте iframe с шириной = 0 и высотой = 0.
Ответ 5
попробуйте добавить это в свою 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 var, который должен быть передан через форму в другую js-функцию или php, не забудьте поместить его в вашу html-форму!.
Это решение отлично работает для меня.
В вашем конкретном случае геолокации вы можете попробовать добавить следующее к функции showPosition (position):
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.
Надеюсь, это поможет.
Ответ 6
Ну, проблема с 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']);
}
}
?>
Ответ 7
JS ist на основе браузера, PHP основан на сервере. Вы должны создать некоторый запрос/сигнал на основе браузера, чтобы получить данные из JS в PHP. Взгляните на Ajax.