如何从.js文件中的jQuery函数访问PHP会话变量? 在这段代码中,我想从会话变量中获取“值”
$(function() {
$("#progressbar").progressbar({
value: 37
});
});
答案 0 :(得分:51)
您可以通过PHP生成javascript文件。没有什么说javascript文件必须有.js扩展名。例如,在HTML中:
<script src='javascript.php'></script>
然后你的脚本文件:
<?php header("Content-type: application/javascript"); ?>
$(function() {
$( "#progressbar" ).progressbar({
value: <?php echo $_SESSION['value'] ?>
});
// ... more javascript ...
如果这个特定方法不是一个选项,你可以在你的javascript文件中放入一个AJAX请求,并从服务器端脚本中将数据作为JSON返回。
答案 1 :(得分:11)
我正在努力解决同样的问题,偶然发现了这个页面。我想出的另一个解决方案是:
在你的html中,将会话变量(我的$_SESSION['origin']
)回显给你选择的任何元素:
<p id="sessionOrigin"><?=$_SESSION['origin'];?></p>
在你的js中,使用jQuery你可以像这样访问它:
$("#sessionOrigin").text();
编辑:甚至更好,将其置于隐藏的input
<input type="hidden" name="theOrigin" value="<?=$_SESSION['origin'];?>"></input>
答案 2 :(得分:7)
如果你想更清晰地分离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);
答案 3 :(得分:2)
您可以使用JSON(例如
)将会话变量从php脚本传递给JQUERYJS:
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['johndoe@jd.com'];
$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
答案 4 :(得分:1)
您无法在JS中访问PHP会话变量/值,一个是服务器端(PHP),另一个是客户端(JS)。
你可以做的是传递或将 SESSION值返回给你的JS,比如说,一个AJAX调用。在你的JS中,调用一个PHP脚本,它只是输出以返回给你的SESSION变量的值,然后用你的JS来处理这个返回的信息。
或者将值存储在COOKIE中,可以通过任一框架访问它......虽然这可能不是您所处情况下的最佳方法。
或者你可以在PHP中生成一些返回/设置变量的JS,即:
<? php
echo "<script type='text/javascript'>
alert('".json_encode($_SESSION['msg'])."');
</script>";
?>
答案 5 :(得分:0)
严格来说这不是使用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';
我希望这会有所帮助。
答案 6 :(得分:0)
奇怪地直接从$ _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