如何在PHP中获取JavaScript变量值

How to get JavaScript variable value in PHP

提问人:rash111 提问时间:3/20/2012 最后编辑:Brett DeWoodyrash111 更新时间:3/26/2021 访问量:354875

问:

我想要 JavaScript 变量的值,我可以使用 PHP 访问它。 我正在使用下面的代码,但它没有在 PHP 中返回该变量的值。

// set global variable in javascript
    profile_viewer_uid = 1;

// php code

$profile_viewer_uid=$_POST['profile_viewer_uid']; 

这给了我以下错误:-

A PHP Error was encountered
Severity: Notice
Message: Undefined index: profile_viewer_uid

我使用的另一个 php 代码给出了空值

$profile_viewer_uid = "<script language=javascript>document.write(profile_viewer_uid);</script>

当我回声时,它什么也没显示。

PHP JavaScript

评论

0赞 user202729 7/28/2018
从 PHP 访问 JavaScript 变量的可能副本

答:

3赞 Quentin 3/20/2012 #1

PHP 在服务器上运行。它输出一些文本。然后它停止运行。

文本将发送到客户端(浏览器)。然后,浏览器将文本解释为 HTML 和 JavaScript。

如果你想从JavaScript获取数据到PHP,那么你需要发出一个新的HTTP请求并运行一个新的(或相同的)PHP脚本。

您可以使用表单或 Ajax 从 JavaScript 发出 HTTP 请求。

2赞 BenOfTheNorth 3/20/2012 #2

这是两种不同的语言,它们在不同的时间运行 - 你不能像那样与它们交互。

PHP 在页面加载时在服务器上执行。加载后,JavaScript 将在浏览器中的客户端计算机上执行。

7赞 floriank 3/20/2012 #3

您可能想从学习 Javascript 和 php 开始。Javascript 是一种客户端脚本语言,运行在连接到运行 php 的 Web 服务器的客户端计算机的浏览器中。这些语言不能直接交流。

根据你的目标,你需要向服务器发出一个AJAX get或post请求,并返回一个json/xml/html/任何你需要的响应,并将结果注入到站点的DOM结构中。为此,我建议使用 Jquery、BackboneJS 或任何其他 JS 框架。有关示例,请参阅 Jquery 文档。

如果您必须将 php 数据传递给同一站点上的 JS,您可以将数据作为 JS 回显,并使用 json_encode() 将 php 数据转换为 JS。

<script type="text/javascript>
    var foo = <?php echo json_encode($somePhpVar); ?>
</script>

评论

18赞 cHao 3/20/2012
你确实意识到“无法沟通”是一个相当夸张的说法,尤其是当你的下一句话谈到如何让他们沟通时。:)
21赞 Chris Cummings 3/20/2012 #4

您需要使用 JS 将 URL 发回,其中包含一个变量,例如:http://www.site.com/index.php?uid=1

通过在 JS 中使用类似这样的东西:

window.location.href=”index.php?uid=1";

然后在 PHP 代码中使用 $_GET:

$somevar = $_GET["uid"]; //puts the uid varialbe into $somevar

评论

0赞 Chris Cummings 3/21/2012
尽管在该 window.location 上,您希望将“1”替换为引用所需变量值的一些代码。
7赞 er.irfankhan11 10/1/2015
在没有重定向的情况下,这是否可能
0赞 Ishan Srivastava 10/26/2017
我怀疑index.php是否是我们可以放在那里的任意名称,或者它是在进行调用之前需要存在的文件,还是我们编写此代码本身的文件的名称?(假设我在同一个文件中同时编写 HTML 和 PHP)
0赞 Jo Momma 11/23/2021
你能用帖子而不是 GET 请求来做到这一点吗?
-1赞 Shrieks 3/20/2012 #5

您需要将此值添加到提交到服务器的表单数据中。你可以使用

<input type="hidden" value="1" name="profile_viewer_uid" id="profile_viewer_uid">

在表单标记中。

评论

0赞 Elliot Harrell 2/15/2021
为什么有这么多反对票?使用 JavaScript 更改 的值,然后使用 JavaScript 提交表单?它有效,并回答了问题!input
14赞 Arslan Tabassum 7/25/2014 #6

下面是工作示例:在同一页面上获取 javascript 变量值。

<script>
var p1 = "success";
</script>

<?php
echo "<script>document.writeln(p1);</script>";
?>

评论

11赞 T30 1/9/2017
这段代码不是将变量从 js 传递给 PHP:它只是添加一个在页面中输出变量的 js 脚本。
2赞 Arslan Tabassum 10/19/2017
这就是我们真正想要的,无需刷新页面...... :)
0赞 T30 10/19/2017
我明白你的意思,但这可以在纯 html/js 中完成。将它包装在 php echo 脚本中只是一个“无用”的开销,因为您的 php(运行服务器端的脚本)仍然不知道变量值。
0赞 Arslan Tabassum 10/19/2017
我同意你的看法......但这是针对一个罕见的场景,在这种情况下,我们需要先在JS中计算一些值,然后需要在PHP中该值进行处理......我经历过这种情况,所以这种方法解决了我的问题......
0赞 T30 10/19/2017
问题是你不能用 php 处理这个变量。当 php 处理这个文件(服务器端)时,js 变量还没有设置。Js 变量是在客户端设置的,当 php 已经运行并且无法再交互时,除非您执行另一个 http 请求(例如使用 ajax)。
0赞 Jatin Patro 7/15/2015 #7

这可能是一件有点棘手的事情,但安全的方法是设置一个 javascript cookie,然后通过 php cookie 变量获取它。然后,将此 php 变量分配给 php 会话,该会话将比 cookie 更安全地保存数据。然后使用 javascript 删除 cookie 并将页面重定向到自身。 假设您已经添加了一个 php 命令来捕获变量,您将得到它。

25赞 humbleiam 9/24/2015 #8

添加一个包含您要访问的 javascript 变量的 cookie。

document.cookie="profile_viewer_uid=1";

然后通过 php 访问它

$profile_viewer_uid = $_COOKIE['profile_viewer_uid'];
5赞 T30 10/19/2017 #9

如果你想在 php 脚本中使用 js 变量,你必须在 HTTP 请求中传递它。

基本上有两种方法:

  • 提交或重新加载页面(根据 Chris 的回答)。
  • 使用 AJAX,它完全用于在网页 (js) 和服务器 (php) 之间进行通信,而无需重新加载/更改页面。

一个基本示例可以是:

var profile_viewer_uid = 1;
$.ajax({
  url: "serverScript.php",
  method: "POST",
  data: { "profile_viewer_uid": profile_viewer_uid }
})

在文件中,您可以执行以下操作:serverScript.php

 $profile_viewer_uid = $_POST['profile_viewer_uid'];
 echo($profile_viewer_uid);
 // prints 1

注意:在这个例子中,我使用了jQuery AJAX,它实现起来更快。你也可以在纯js中做到这一点。

评论

0赞 Davidcz 7/26/2022
我在 xampp 中创建了这两个文件,但在 .php 中我看到: 警告:第 2 行的 C:\xampp\htdocs\zkoska\ppp 中未定义的数组键“profile_viewer_uid.php
1赞 Chris van der Gaag 3/26/2021 #10

在您的 html 表单中创建一个隐藏字段

<input type="hidden" id="scanCode" name="SCANCODE"></input>

然后在您的 javascript 中通过添加来更新字段值;

document.getElementById("scanCode").setAttribute('value', scanCode);