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

IT技术 php javascript jquery
2021-03-04 17:37:45

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

$(function() {
   $("#progressbar").progressbar({
      value: 37
   });
});
6个回答

您可以通过 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 从服务器端脚本返回。

你的意思是我可以在 .js 文件中编写 PHP 代码?现在应该是什么结构?如何将两个函数放在 $(document).ready() 下的两个不同文件中?
2021-04-17 17:37:45
.js扩展并不意味着什么:它重命名.php然后使用您的会话变量正如我上面显示。您的 javascript 文件可以file.gibbldygook,它们仍然可以工作。
2021-04-25 17:37:45
您还应该使用简单的 PHP 标头将文件类型设置为 JavaScript,将其放在 JS (.php) 文件的顶部:<?php header("Content-type: application/javascript"); ?>没有它也可以工作,但最好将其设置为这样,以便浏览器知道其内容是 JavaScript。
2021-04-27 17:37:45
如果我想把它放在 .js 文件中的 $(document).ready() 函数中怎么办?
2021-05-02 17:37:45
你有点不清楚,艾哈迈德。浏览器不关心您的 javascript 文件的名称。将您的文件从“script.js”重命名为“script.php”,然后使用我上面显示的会话变量。您可以$(document).ready()任意数量的文件中使用任意数量的块,它会正常工作。
2021-05-10 17:37:45

我在同样的问题上苦苦挣扎,偶然发现了这个页面。我想出的另一个解决方案是:

在您的 html 中,将会话变量(我的这里是$_SESSION['origin'])回显到您选择的任何元素: <p id="sessionOrigin"><?=$_SESSION['origin'];?></p>

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

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

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

这比进行需要处理时间的 AJAX 调用更好的解决方案。除非会话变量是密码等敏感信息。
2021-04-23 17:37:45

如果您想保持 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);

您可以使用 JSON 将会话变量从 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 会话变量/值,一个是服务器端 (PHP),另一个是客户端 (JS)。

您可以做的是SESSION 值传递返回给您的 JS,例如 AJAX 调用。在您的 JS 中,调用一个 PHP 脚本,该脚本简单地将 SESSION 变量的值输出并返回给您的 JS,然后使用您的 JS 来处理此返回的信息。

或者将值存储在一个 COOKIE 中,它可以被任一框架访问......尽管这可能不是您的情况的最佳方法。

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

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