如何从.js文件中的jQuery函数访问PHP会话变量?

3xiyfsfu  于 2023-02-11  发布在  PHP
关注(0)|答案(7)|浏览(106)

如何从.js文件中的jQuery函数访问PHP会话变量?在这段代码中,我想从会话变量中获取“值

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

m4pnthwp1#

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

y53ybaqx

y53ybaqx2#

我也在纠结同样的问题,偶然发现了这个页面。我想出的另一个解决方案是这样的:
在html中,将session变量(我的这里是$_SESSION['origin'])回显到您选择的任何元素:<p id="sessionOrigin"><?=$_SESSION['origin'];?></p>
在js中,使用jQuery可以像这样访问它:$("#sessionOrigin").text();

**编辑:**或者更好的方法是,将其放在隐藏的input

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

rpppsulh

rpppsulh3#

如果您希望保持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);
06odsfpq

06odsfpq4#

可以使用JSON将会话变量从php脚本传递到JQUERY,例如
联森:

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
0x6upsns

0x6upsns5#

你不能在JS中访问PHP会话变量/值,一个是服务器端(PHP),另一个是客户端(JS)。
你可以做的是通过 AJAX 调用将SESSION值 passreturn 到你的JS中,在你的JS中,调用一个PHP脚本,这个脚本简单地将SESSION变量的值输出返回到你的JS中,然后使用你的JS来处理这个返回的信息。
或者将值存储在COOKIE中,可以通过任何一个框架访问COOKIE,尽管这可能不是您的情况下的最佳方法。
或者你可以在PHP中生成一些JS来返回/设置变量,例如:

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

yrdbyhpb6#

严格地说,这不是使用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);
}

要调用它们,您需要创建一个小型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';

希望这能帮上忙。

fwzugrvs

fwzugrvs7#

奇怪的是,直接从$_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

相关问题