如何将JavaScript变量输出存储到PHP变量中?

时间:2013-02-02 14:33:08

标签: php javascript html

我在JavaScript中有以下代码:

<script>
var a="Hello";
</script>

PHP代码: -

<?php 
$variable = // I want the above JavaScript variable 'a' value to be stored here
?>

注意:我不希望它在表单提交中。我在JavaScript中有一些逻辑,我想在同一个PHP页面中使用它...请让我知道如何做到这一点。

8 个答案:

答案 0 :(得分:15)

你必须记住,如果JS和PHP存在于同一个文档中,PHP将首先执行(在服务器上),JS将在第二个(在浏览器中)执行 - 这两个将永远不会交互(除了用PHP输出JS的地方,这实际上不是两个引擎之间的交互。)

考虑到这一点,你最接近的是在JS中使用PHP变量:

<?php
$a = 'foo'; // $a now holds PHP string foo
?>
<script>
    var a = '<?php echo $a; ?>'; //outputting string foo in context of JS
                                 //must wrap in quotes so that it is still string foo when JS does execute
                                 //when this DOES execute in the browser, PHP will have already completed all processing and exited
</script>
<?php
//do something else with $a
//JS still hasn't executed at this point
?>

正如我所说,在这种情况下,PHP(全部)在服务器上执行FIRST,导致:

  1. 要创建为字符串'foo'
  2. 的PHP变量$a
  3. 在某些JavaScript(当前未执行)的上下文中输出的$a的值
  4. 使用PHP的$a
  5. 完成了更多工作
  6. 所有输出,包括带有var赋值的JS,都会发送到浏览器。
  7. 如上所述,这导致以下内容被发送到浏览器执行(为清楚起见,我删除了JS注释):

    <script>
        var a = 'foo';
    </script>
    

    然后,只有这样,JS才会开始执行自己的变量a设置为“foo”(此时PHP不在图片中)。

    换句话说,如果这两个文件存在于同一个文档中并且没有执行与服务器的额外交互,则JS不会对PHP产生任何影响。此外,PHP对JS的影响有限,只能在JS的上下文中输出一些JS或其他东西。

答案 1 :(得分:12)

<html> 
<head>
    <script>
        var a="Hello";
    </script>

</head> 

<body> 
    <?php 
        echo $variable = "<script>document.write(a)</script>"; //I want above javascript variable 'a' value to be store here
    ?>
</body> 

答案 2 :(得分:2)

理想的方法是通过AJAX调用传递它,但是对于快速而脏的方法,您所要做的就是在$_GET参数中使用此变量重新加载页面 -

<script>
  var a="Hello";
  window.location.href = window.location.href+'?a='+a;
</script>

您的页面将重新加载,现在您的PHP中,您将可以访问$_GET['a']变量。

<?php 
  $variable = $_GET['a'];
?>

答案 3 :(得分:1)

如果这与表单提交有关,请在表单中使用隐藏的输入,并将隐藏的输入值更改为此变量值。然后你可以在php页面中获取隐藏的输入值,并在表单提交后将其分配给你的php变量。

<强>更新

根据你的编辑,似乎你不明白javascript和php是如何工作的。 Javascript是一种客户端语言,而php是一种服务器端语言。因此,当您在服务器中执行相关页面时,您无法执行javascript逻辑并将该变量值用于php变量。在客户端浏览器处理从Web服务器返回的网页(已经执行相关页面的php代码)之后,您可以运行相关的javascript逻辑。在执行javascript代码并将相关值分配给相关的javascript变量之后,您可以使用表单提交或ajax发送该javascript变量值以供另一个php页面使用(或者处理并获取相同的php页面的请求) )。

答案 4 :(得分:0)

你真的不能。 PHP在服务器上生成然后发送到浏览器,在那里JS开始做它的东西。所以,无论在页面上的JS中发生什么,PHP都不知道,因为它已经完成了它的工作。 @manjula是正确的,如果你想要这样做,你必须使用POST或ajax。

答案 5 :(得分:0)

JavaScript变量= PHP变量,请尝试以下操作:-

<script>
var a="Hello";
<?php
$variable='a';
?>
</script>

注意:-它仅在您使用脚本标记执行php代码时运行。我成功初始化了php变量。

答案 6 :(得分:0)

您可以使用AJAX解决此问题。您不需要加载用于AJAX的JQuery,但与本地JS相比,它具有更好的错误和成功处理能力。

我会这样做:

1)将点击事件监听器添加到页面上的所有锚点。 2)点击后,您可以为您的php设置ajax请求,在POST-DATA中设置锚点ID或文本值 3)php获取值,您可以对数据库设置请求。然后,您返回所需的值并将其回显到ajax-request。 4)您对ajax-request的成功功能正在做一些事情

有关ajax请求的更多信息,请回到这里:

-> Ajax-Request NATIVE https://blog.garstasio.com/you-dont-need-jquery/ajax/

一个简单的JQuery示例:

$("button").click(function(){
  $.ajax({url: "demo_test.txt", success: function(result){
    $("#div1").html(result);
  }});
});

答案 7 :(得分:0)

您认为:

<?php 

// declare your php function here
function calculate() {
    return;
}

?>

<script>
$("#upload").on("click", function(){
    var csv = $('#csv');
    var csvFile = csv[0].files[0];
    var ext = csv.val().split(".").pop().toLowerCase();

    if($.inArray(ext, ["csv"]) === -1){
        alert('upload csv');
        return false;
    }
    if(csvFile != undefined){
        reader = new FileReader();
        reader.onload = function(e){

            csvResult = e.target.result.split(/\r|\n|\r\n/);
            
            var temp=[];
            for(i=0;i< csvResult.length; i++){
                if(csvResult[i] != "" && csvResult[i] != null){
                var data = csvResult[i].split(",");
                var rssi = data[0];
                var distance = data[1];
                var rssisample = 8;
                    if(distance == 1){
                        var calculation = <?php echo calculate(); ?>
                        temp.push(rssi);
                    }
                }
            }
        }
    }
});
</script>

javascript代码:

  <?php $value = '<p id="course_id"></p>';?>