5

所以我想知道,如果我有一个简单的 php 表单将信息发布到某个变量,我如何将该发布的变量传递给 javascript 并能够操作数据?我想出的唯一方法是使用内联 javascript 和 php,但我觉得必须有一种更干净、更优雅的方法来做到这一点,其中变量不会在源代码中如此明显地显示,而是在外部处理..这是我现在正在玩的东西:

<form action="index2.php" method="post">
    <input name="sugar" class="form" type="text" value="" />
    <input name="fat" class="form" type="text" value="" />
    <input name="protein" class="form" type="text" value="" />
    <input type="submit" value="submit" />
</form>

其次是:

<?php 
$sugar = $_POST['sugar'];
$fat = $_POST['fat'];
$protein = $_POST['protein'];
?>

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var sugar = "<?php echo $sugar ?>";
        var fat = "<?php echo $fat ?>";
        var protein = "<?php echo $protein ?>";
    </script>
    <script src="test.js" type="text/javascript"></script>
</head>

有人对我可以遵循的替代方案有什么建议吗?我已经很久没有使用javascript了,所以在处理这样的情况时知道我的选择会很高兴。

4

6 回答 6

8

最简单的方法是发送一个包含您发送的所有数据的 Javascript 对象。这可以通过 JSON 编码轻松完成$_POST

var data = <?php echo json_encode($_POST) ?>;

然后,您可以访问,例如,data.fat如果您fat在 POST 请求中发送了一个值。

于 2012-08-03T15:50:22.390 回答
2

在不使用 _GET 并将变量存储在 URL 中的情况下,您目前拥有满足您需求的最佳解决方案。

于 2012-08-03T15:46:04.613 回答
2

如果您想将这些变量添加到您的 JavaScript 中,则必须在某处打印这些变量并使其可见。

我一直在使用 JSON 编码并打印它们,以便将它们保存在本地 JavaScript 变量中:

<?php
    function passToJavascript($variableName, $variable){
        if($variable = json_encode($variable))
            echo '<script>var '. $variableName .' = '. $variable .';</script>';
    }

    $foo = array(
        'bar1' => 1,
        'bar2' => 2,
        'bar3' => 3
    );

    passToJavascript('foo', $foo);
?>

将在您的 HTML 中打印:

<script>var foo = {"bar1":1,"bar2":2,"bar3":3};</script>

这样你就可以传递你想要的任何变量,可能是一个字符串、一个数字、一个数组,甚至是一个“关联数组”。

于 2012-08-03T16:21:26.383 回答
1

我觉得将 php 变量传递给 javascript 变量的最佳方法是先对它们进行 json_encode。如果你将一个 php 数组传递给 javascript,你不能简单地说

var1 = <?php echo $var1; ?>

你应该像下面那样做。

<?php
    $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
?>

<script type="text/javascript">
    var arr = "<?php echo json_encode($arr) ?>";
</script>
于 2012-08-03T15:50:16.447 回答
1

您可以在输入中编写您的变量,然后使用 javascript 访问这些输入

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            //You already linked jquery so I use it, you could do without if necessary.
            $(document).ready(function(){
                var sugar = $('#sugar').val();
                var fat = $('#fat').val();
                var protein = $('#protein').val()
            });
        </script>
            var sugar = "<?php echo $sugar ?>";
            var fat = "<?php echo $fat ?>";
            var protein = "<?php echo $protein ?>";
        </script>
        <script src="test.js" type="text/javascript"></script>
    </head>
    <body>
        <input type="hidden" id="sugar" value="<?php echo $sugar ?>" />
        <input type="hidden" id="fat" value="<?php echo $fat?>" />
        <input type="hidden" id="protein" value="<?php echo $protein?>" />
    </body>
</html>

这样,您的 javascript 就可以全部驻留在静态文件中。

于 2012-08-03T15:50:52.263 回答
0

您可以尝试使用 GET 而不是 POST 发送变量,然后您可以直接从 javascript 访问它们,如下所示:http: //javascript.about.com/library/blqs1.htm

据我所知,没有办法从 javascript 访问 POST 变量。你将不得不使用你正在做的事情

于 2012-08-03T15:49:55.530 回答