У меня 2 страницы, один PHP и один Javascript. Я хотел бы передать переменную из этого PHP-скрипта на одной странице:
$strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; $result=mysql_query($strFind) or die(mysql_error()); $row=mysql_fetch_array($result); $room=$row['chatroomid'];
на этот Javascript на другой странице:
var timestamp = 0; var currentroom = $room; var heartbeatTimer; var minHeartbeat = 3000; var maxHeartbeat = 12000;
Как я могу это сделать?
Вы не можете «пропускать» переменную где угодно. Но только скалярное значение. Честно говоря, вы можете передавать только текстовые данные.
Итак, в случае javascript у вас есть 2 варианта:
Для генерации целого js-кода из PHP вместе со всеми его переменными. Очень нравится, как вы создаете HTML.
Чтобы запросить некоторую переменную из JS, запущенной в браузере, используя технику AJAX.
Вы можете это сделать, когда JavaScript генерируется PHP. Пример:
<?php ... $curmemid = intval($externalValue); $strFind = 'SELECT * FROM cometchat_chatrooms_users WHERE userid='.$curmemid; $result = mysql_query($strFind) or die(mysql_error()); if (isset($result)) { $row = mysql_fetch_array($result); $room = $row['chatroomid']; } else { echo 'There is something wrong!'; $room = -1; } ... ?> <script type="text/javascript"> var timestamp = 0; var currentroom = <?php echo $room; ?>; var heartbeatTimer; var minHeartbeat = 3000; var maxHeartbeat = 12000; </script>
<?php $strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; $result=mysql_query($strFind) or die(mysql_error()); $row=mysql_fetch_array($result); $room=$row['chatroomid']; ?> <script type="text/javascript"> var timestamp = 0; var currentroom = <?php if(isset($room))echo $room; else echo ""; ?>; var heartbeatTimer; var minHeartbeat = 3000; var maxHeartbeat = 12000; </script>
Другим вариантом является PHP, выводящий скрытый элемент с переменной в нем, а затем JS, читающий его.
Например
<?php echo '<input type="hidden" id="myvar" value='.$val.' />'; ?>
а затем в JS
var v = document.getElementById("myvar"); // do something with v.value
Конечно, это легко подделать клиентом, поэтому возьмите 2 предостережения:
1) используйте это только в том случае, если для любого пользователя нет проблемы с возможностью видеть значение переменной (например, глядя на источник)
2) если JS делает что-то, что может быть «опасно», например, делает асинхронный вызов страницы PHP, которая что-то делает в БД с этим значением, обязательно должна иметь правильные проверки на второй странице PHP (НЕ в JS) для обеспечения того, чтобы ценность не была подделана
для другой страницы вы можете использовать $ _SESSION
<script type="text/javascript"> var timestamp = 0; var currentroom = <?php echo $_SESSION['room']; ?>; var heartbeatTimer; var minHeartbeat = 3000; var maxHeartbeat = 12000; </script>
Для такой же последовательности файлов и сценариев – это очень просто, не нужно СЕССИИ
var currentroom = <?php echo $room; ?>;
попробуйте использовать Session для хранения вашей переменной комнаты и использовать ее с javascript с помощью команды echo
Код будет работать как есть. Когда вывод (html и javascript) генерируется вашим php, он уже выполнил замену. Таким образом, ваше значение будет вставлено в виде литерала. Если это строка, вам все равно придется ее процитировать.
var currentroom = '$ room';
станет
var currentroom = 'myroom';
в выводе.