1

基本问题:具体何时设置 $_POST 和 $_GET 变量?我问的原因在下面解释。

提前披露:我在这里分享的文件是为了测试/学习目的,并不旨在实现任何有用的东西。我写它是为了将这个问题与我正在从事的项目的其他细节隔离开来。

这是我正在尝试做的总结:我从表单调用一个javascript函数

<form action="javascript:jsTest()" ... />

然后从 jsTest() 中,我根据 php 函数 phpTest() 的返回分配一个 javascript 变量:

var jsVar = <?php echo json_encode(phpTest()); ?>;

函数 phpTest() 只返回一个 $_POST 变量:

return $_POST['testName'];

这是完整的代码:

<?php
session_start();
function phpTest() {
    return $_POST['testName'];
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8" />
    <title>javascript/php test</title>
    <script type="text/javascript">
        function jsTest() {
            var jsVar = <?php echo json_encode(phpTest()); ?>;
            alert(jsVar);
        }
    </script>
</head>

<body>
    <form method="POST" name="testForm" action="javascript:jsTest()">
        <input type="text" name="testName" value="username" />
        <input type="submit" value="submit" />
    </form>
</body>

</html>

问题:警报总是显示null

我以两种方式对此进行了测试。1) 如果我将表单操作设置为单独的 .php 文件,则设置与表单输入字段关联的 $_POST 变量,并在浏览器中显示该文件中的这些 $_POST 值的回显。或者,2)如果我从 phpTest() 返回一个简单的字符串,

return 'hello kitty';

然后 javascript alert() 准确显示返回的字符串。因此,我认为可以安全地假设 $_POST 变量尚未设置。这让我想到了一个我无法找到答案的问题:

$_POST 变量究竟是什么时候设置的?我假设它是在页面重新加载之前(我的方法需要),并且我假设这是因为如果我在我的代码中使用 method="GET" ,我会看到 GET 变量附加到 URL 上而没有任何先前的页面重新加载。

提前致谢。

克里斯

4

1 回答 1

1

正如 Marc B 在您当前的代码示例中所说,它永远不会按您的意愿工作。

$_POST将始终在您的脚本中可用,因为它是 PHP 的超全局数组之一,但它可能没有值。$_POST通过 HTTP POST 请求发送 POSTDATA 时有一个值。您可以以编程方式设置 的值,$_POST但这并不酷。曾经。

为了使您的脚本正常工作(ish),您需要发送一个包含一些 POSTDATA 的 HTTP POST 请求。您可以使用 cURL 或 Firefox 的海报插件来做到这一点。

POST /index.php HTTP/1.1
User-Agent: curl/7.21.4 (universal-apple-darwin11.0)
Host: example.org
Accept: */*
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

testName=yeahboi

如果您可以查看您的 HTTP 响应正文,则 JavaScript 变量JsVar现在应该填充为“yeahboi”。

我已经稍微更新了您的脚本,以通过 HTTP POST 将表单提交给它自己并填充一个 JavaScript 变量。

<?php

// Script name: index.php

// Define a default value...
$name = 'unknown';

// Make sure post item 'testName' is available...
if(isset($_POST['testName']) &&
    !empty($_POST['testName'])) {

    // POST is available update name...
    $name = $_POST['testName'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>javascript/php test</title>
    <script>
    // wait for the DOM to be ready then update the JS variable with PHP's $name variable
    document.addEventListener('DOMContentLoaded', function() {

        var elm = document.getElementById('post-response'),
            value = '<?php echo $name; ?>';

        elm.innerHTML = value;
    }, false);
    </script>
</head>
<body>
    <div id="post-response"></div>
    <form method="POST" name="testForm" action="index.php">
        <input type="text" name="testName" value="username" />
        <input type="submit" value="submit" />
    </form>
</body>
</html>

希望这对您有所帮助。

于 2012-07-31T20:45:25.967 回答