$_POST值在<形式动作=“;javascript:someJSFunction()"/>
$_POST value not set when <form action="javascript:someJSFunction()" ... />
基本问题:$_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上,而之前没有任何页面重新加载。
提前谢谢。
Chris
正如Marc B在您当前的代码示例中所说,它永远不会像您想要的那样工作。
$_POST
在整个脚本中都是可用的,因为它是PHP的超全局数组之一,但它可能没有值。当通过HTTP POST请求发送POSTDATA时,$_POST
具有值。您可以通过程序设置$_POST
的值,但这并不酷。曾经
为了让脚本工作(ish),您需要发送一个填充了一些POSTDATA的HTTPPOST请求。您可以使用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响应主体,那么JavaScript变量JsVar
现在应该填充"yeahboi"。
我更新了你的脚本一点,通过HTTPPOST将表单提交给它自己,并填充一个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>
希望这能帮你一点忙。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- JavaScript .some 函数用于对象属性
- Some kind of JavaScript's preventDefault for Android
- Javascript array.some()函数不能正常工作
- 如果在 javascript .some() 函数中不满足条件,则返回值
- Javascript -每个数组都有'some'作为钥匙
- 有没有相当于JavaScript's Array.prototype.some()函数
- 相当于javascript或jquery中的.some()方法
- JavaScript数组every和some之间的差异