【问题标题】:Is it possible to use $_SESSION with a Javascript file?是否可以将 $_SESSION 与 Javascript 文件一起使用?
【发布时间】:2015-06-11 10:59:25
【问题描述】:

我有一个 Javascript 文件 main.js,我需要在其中使用 echo $_SESSION["username"],但它显然不起作用。有什么办法可以做到这一点/某种解决方法吗?

【问题讨论】:

  • PHP 不会在 .js 文件上执行。
  • 您可以选择执行 ajax 调用来检索您需要的会话值

标签: javascript php session


【解决方案1】:

您无法在 .js 文件中执行 PHP 代码,但有一些方法可以解决它。您可以使用 ajax 调用来获取该变量(查看 this link 以获取 ajax 提示)。

根据您希望存储的信息,您还可以让 PHP 将其回显到您的 html 页面中的特定元素中,然后使用 JS 来查找该元素,如下所示:

echo "<span id='usernameForJS' style='display: none;'>".$_SESSION['USERNAME']."</span>";

然后像这样用 JS 去抓取内部 html 中的元素:

var username = document.getElementById('usernameForJS').innerHTML;

我建议使用 AJAX,因为这样您的页面中几乎不需要多余的元素。显然不要对敏感的事情使用第二种方法。

【讨论】:

  • 我一直在这样做,但将所有 Javascript 都移到了自己的文件中,因为它太长了。我可以登录,将它们重定向到执行此操作并使用 JS 设置 cookie 的 html 页面,然后直接将它们重定向回 main.js 可以访问该 cookie 值的主页吗?
  • 你可以,是的。您只需要使用 PHP header() 将您重定向到您想要执行的页面。当您可以在当前页面的顶部执行此操作时,我不完全确定您为什么要在其他页面上执行此操作,但也许我遗漏了一些东西。
  • 等待main.js中设置的JS可以访问另一个文件吗?
  • 这个answer 可能会有所帮助。您的 JS 的范围由它们的加载顺序定义。你显然不能做像go(); function go(){ alert();} 这样的事情,因为当你调用go(); 时,你还没有真正定义go(); 它是什么。如果我在&lt;script&gt; 标签中包含两个文件,first.jssecond.js,第一个文件包含函数声明,第二个文件调用该函数,它将按预期工作。
【解决方案2】:

我在 css-tricks.com 上看到了一个选项

https://css-tricks.com/snippets/htaccess/use-php-inside-javascript/

我从来没有自己尝试过,但评论员说它有效。

还有一个关于如何在 cmets 中执行此操作的说明: https://css-tricks.com/snippets/htaccess/use-php-inside-javascript/#comment-85757

但是不要忘记这是一种相当“hacky”的方法,您应该考虑打开该 javascript 文件并从 .php 页面实例化您的类/函数(或此文件中的任何内容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2017-06-19
    • 2022-08-23
    相关资源
    最近更新 更多