Как получить доступ к переменным сеанса PHP из функции jQuery в файле .js? В этом коде я хочу получить "значение" из переменной сеанса
$(function() {
$("#progressbar").progressbar({
value: 37
});
});
Как получить доступ к переменным сеанса PHP из функции jQuery в файле .js? В этом коде я хочу получить "значение" из переменной сеанса
$(function() {
$("#progressbar").progressbar({
value: 37
});
});
Вы можете создать файл javascript через PHP. Ничто не говорит, что файл javascript должен иметь расширение .js. Например, в вашем HTML:
<script src='javascript.php'></script>
Затем ваш файл script:
<?php header("Content-type: application/javascript"); ?>
$(function() {
$( "#progressbar" ).progressbar({
value: <?php echo $_SESSION['value'] ?>
});
// ... more javascript ...
Если этот конкретный метод не является вариантом, вы можете поместить запрос AJAX в свой файл javascript и вернуть данные в виде JSON со стороны сервера script.
Я боролся с той же проблемой и наткнулся на эту страницу. Другое решение, которое я придумал, будет следующим:
В вашем html, эхо переменную сеанса (мой здесь $_SESSION['origin']
), любой элемент по вашему выбору:
<p id="sessionOrigin"><?=$_SESSION['origin'];?></p>
В js, используя jQuery, вы можете получить к нему доступ так:
$("#sessionOrigin").text();
EDIT: или даже лучше, поместите его в скрытый input
<input type="hidden" name="theOrigin" value="<?=$_SESSION['origin'];?>"></input>
Если вы хотите поддерживать более четкое разделение PHP и JS (упрощает подсветку синтаксиса и проверку IDE), вы можете создать jquery-плагины для своего кода, а затем передать $_SESSION ['param'] в качестве переменной.
Итак, в файле page.php:
<script src="my_progress_bar.js"></script>
<script>
$(function () {
var percent = <?php echo $_SESSION['percent']; ?>;
$.my_progress_bar(percent);
});
</script>
Затем в файле my_progress_bar.js:
(function ($) {
$.my_progress_bar = function(percent) {
$( "#progressbar" ).progressbar({
value: percent
});
};
})(jQuery);
Вы можете передать переменные сеанса из вашего php script в JQUERY с помощью JSON, например
JS:
jQuery("#rowed2").jqGrid({
url:'yourphp.php?q=3',
datatype: "json",
colNames:['Actions'],
colModel:[{
name:'Actions',
index:'Actions',
width:155,
sortable:false
}],
rowNum:30,
rowList:[50,100,150,200,300,400,500,600],
pager: '#prowed2',
sortname: 'id',
height: 660,
viewrecords: true,
sortorder: 'desc',
gridview:true,
editurl: 'yourphp.php',
caption: 'Caption',
gridComplete: function() {
var ids = jQuery("#rowed2").jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var cl = ids[i];
be = "<input style='height:22px;width:50px;' `enter code here` type='button' value='Edit' onclick=\"jQuery('#rowed2').editRow('"+cl+"');\" />";
se = "<input style='height:22px;width:50px;' type='button' value='Save' onclick=\"jQuery('#rowed2').saveRow('"+cl+"');\" />";
ce = "<input style='height:22px;width:50px;' type='button' value='Cancel' onclick=\"jQuery('#rowed2').restoreRow('"+cl+"');\" />";
jQuery("#rowed2").jqGrid('setRowData', ids[i], {Actions:be+se+ce});
}
}
});
PHP
// start your session
session_start();
// get session from database or create you own
$session_username = $_SESSION['John'];
$session_email = $_SESSION['[email protected]'];
$response = new stdClass();
$response->session_username = $session_username;
$response->session_email = $session_email;
$i = 0;
while ($row = mysqli_fetch_array($result)) {
$response->rows[$i]['id'] = $row['ID'];
$response->rows[$i]['cell'] = array("", $row['rowvariable1'], $row['rowvariable2']);
$i++;
}
echo json_encode($response);
// this response (which contains your Session variables) is sent back to your JQUERY
Вы не можете получить доступ к переменным/значениям сеанса PHP в JS, один из них - серверная (PHP), другая клиентская сторона (JS).
Что вы можете сделать, это передать или вернуть значение SESSION вашему JS, например, вызовом AJAX. В своем JS сделайте вызов PHP script, который просто выводит для возврата в JS значение переменной SESSION, затем используйте JS для обработки возвращенной информации.
Альтернативно хранить значение в COOKIE, к которому можно получить доступ любой из фреймворков. Хотя это может быть не лучший подход в вашей ситуации.
ИЛИ вы можете сгенерировать некоторый JS в вашем PHP, который возвращает/устанавливает переменную, т.е.:
<? php
echo "<script type='text/javascript'>
alert('".json_encode($_SESSION['msg'])."');
</script>";
?>
Это строго не означает использование jQuery, но я нашел этот метод проще, чем использование jQuery. Есть, вероятно, бесконечные методы достижения этого и многих умных здесь, но не все работали для меня. Однако следующий метод всегда работал, и я передаю его, если он помогает кому-то другому.
Требуются три библиотеки javascript, createCookie
, readCookie
и eraseCookie
. Эти библиотеки не мои, но я начал использовать их около 5 лет назад и не знаю их происхождения.
createCookie = function(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
readCookie = function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
eraseCookie = function (name) {
createCookie(name, "", -1);
}
Чтобы вызвать их, вам нужно создать небольшую функцию PHP, обычно как часть вашей библиотеки поддержки, следующим образом:
<?php
function createjavaScriptCookie($sessionVarible) {
$s = "<script>";
$s = $s.'createCookie('. '"'. $sessionVarible
.'",'.'"'.$_SESSION[$sessionVarible].'"'. ',"1"'.')';
$s = $s."</script>";
echo $s;
}
?>
Итак, чтобы использовать все, что вам нужно включить в файл index.php,
$_SESSION["video_dir"] = "/video_dir/";
createjavaScriptCookie("video_dir");
Теперь в javascript library.js вы можете восстановить файл cookie с помощью следующего кода:
var videoPath = readCookie("video_dir") +'/'+ video_ID + '.mp4';
Надеюсь, это поможет.
Странный импорт напрямую из $_SESSION не работает, но должен сделать это, чтобы заставить его работать:
<?php
$phpVar = $_SESSION['var'];
?>
<script>
var variableValue= '<?php echo $phpVar; ?>';
var imported = document.createElement('script');
imported.src = './your/path/to.js';
document.head.appendChild(imported);
</script>
и в to.js
$(document).ready(function(){
alert(variableValue);
// rest of js file