如何在.js文件中从jQuery函数访问PHP会话variables?

如何在.js文件中从jQuery函数访问PHP会话variables? 在这个代码中,我想从一个会话variables中获取“值”

$(function() { $("#progressbar").progressbar({ value: 37 }); }); 

您可以通过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返回。

我正在同样的问题挣扎,偶然发现这个网页。 我想出的另一个解决scheme是:

在你的html中,echo会话variables(我的这里是$_SESSION['origin'] )到你select的任何元素: <p id="sessionOrigin"><?=$_SESSION['origin'];?></p>

在你的js中,使用jQuery你可以像这样访问它: $("#sessionOrigin").text();

编辑:甚至更好,把它放在一个隐藏的input

<input type="hidden" name="theOrigin" value="<?=$_SESSION['origin'];?>"></input>

如果你想保持一个清晰的PHP和JS的分离(它使语法突出显示和在IDE中检查更容易),那么你可以为你的代码创buildjquery插件,然后将$ _SESSION ['param']作为variables传递。

所以在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); 

您可以使用JSON将会话variables从您的php脚本传递给JQUERY,如

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['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 

你不能访问JS的PHP会话variables/值,一个是服务器端(PHP),另一个客户端(JS)。

你可以做的是通过返回 SESSION值到你的JS,通过一个AJAX调用。 在你的JS中,调用一个PHP脚本,它只是简单的输出以返回你的JS的SESSIONvariables的值,然后用你的JS来处理这个返回的信息。

或者将值存储在一个COOKIE中,这个COOKIE可以被任何框架访问。虽然这可能不是您的情况中最好的方法。

或者你可以在你的PHP中生成一些JS,它返回/设置variables,即:

 <? php echo "<script type='text/javascript'> alert('".json_encode($_SESSION['msg'])."'); </script>"; ?> 

这严格来说不是使用jQuery,但我发现这个方法比使用jQuery更容易。 可能有无数的方法来实现这个,还有很多聪明的方法,但是并不是所有的方法都适合我。 但是,下面的方法一直工作,我通过它以防万一,以帮助别人。

需要三个JavaScript库, createCookiereadCookieeraseCookie 。 这些图书馆不是我的,但是大约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); } 

要调用它们,您需要创build一个小的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库.js中,你可以用下面的代码恢复cookie:

 var videoPath = readCookie("video_dir") +'/'+ video_ID + '.mp4'; 

我希望这有帮助。