<form action =“javascript:someJSFunction()”... =“”> </form>时未设置$ _POST值

时间:2012-07-25 15:19:19

标签: php javascript post

基本问题:具体是什么时候设置$ _POST和$ _GET变量?我问的原因解释如下。

提前披露:我在这里分享的文件用于测试/学习目的,并不旨在实现任何有用的功能。我写这篇文章是为了将这一个问题与我正在进行的项目的其他细节区分开来。

以下是我正在尝试做的总结:我从表单中调用javascript函数

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

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

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而没有任何先前的页面重新加载。

提前致谢。

克里斯

1 个答案:

答案 0 :(得分:1)

正如Marc B用您当前的代码示例所说,它永远不会像您想要的那样工作。

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

要使脚本正常工作(ish),您需要发送填充了一些POSTDATA的HTTP POST请求。您可以使用cURL或Firefox的Poster插件来执行此操作。

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响应正文,则现在应该使用'yeahboi'填充JavaScript变量JsVar

我已经稍微更新了你的脚本,通过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>

希望这会对你有所帮助。