【问题标题】:How to access PHP session variables from jQuery function in a .js file?如何从 .js 文件中的 jQuery 函数访问 PHP 会话变量?
【发布时间】:2011-05-20 22:14:32
【问题描述】:

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

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

【问题讨论】:

    标签: php javascript jquery


    【解决方案1】:

    您可以通过 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 文件中的 $(document).ready() 函数中怎么办?
    • .js 扩展名没有任何意义:将其重命名为 .php 并使用您的会话变量,如上所示。您的 javascript 文件可能是 file.gibbldygook,它们仍然可以工作。
    • 你的意思是我可以在 .js 文件中编写 PHP 代码?现在应该是什么结构?如何将两个函数放在 $(document).ready() 下的两个不同文件中?
    • 你有点不清楚,艾哈迈德。浏览器不关心您的 javascript 文件的名称。将您的文件从“script.js”重命名为“script.php”,然后使用上面显示的会话变量。您可以在任意数量的文件中使用任意数量的 $(document).ready() 块,它会正常工作。
    • 您还应该使用简单的 PHP 标头将文件类型设置为 JavaScript,将其放在 JS (.php) 文件的顶部:&lt;?php header("Content-type: application/javascript"); ?&gt; 没有它也可以,但最好将其设置为这样,以便浏览器知道其内容是 JavaScript。
    【解决方案2】:

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

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

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

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

    &lt;input type="hidden" name="theOrigin" value="&lt;?=$_SESSION['origin'];?&gt;"&gt;&lt;/input&gt;

    【讨论】:

    • 这比进行需要处理时间的 AJAX 调用更好。除非会话变量是密码等敏感信息。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您可以使用 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 
      

      【讨论】:

        【解决方案5】:

        您不能在 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>";
        ?>
        

        【讨论】:

          【解决方案6】:

          这严格来说不是使用 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';
          

          我希望这会有所帮助。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-08-31
              相关资源
              最近更新 更多