【发布时间】:2017-11-07 20:04:02
【问题描述】:
我只是在学习 PHP、XML、AJAX 等,并且我有一个总体上可以正常工作的表单。但我无法将复选框的值/状态传递给我的 PHP 脚本。
请注意,我的服务器似乎无法使用 POST 方法(我正在单独研究)。所以我正在使用GET。希望这不相关,但只是想注意以防万一。
这是我的简化 HTML 文件:
<html>
<head>
<script>
function showUser(u) {
alert(u.value);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","checkbox_test.php?u=" + u.value,true);
xmlhttp.send();
return false;
}
</script>
</head>
<body>
<form method="get" onsubmit="return showUser(this.checkboxID)">
<input id="checkboxID" name="checkboxName" value="checkboxValue" type="checkbox">
<input type="submit" value="Submit">
</form>
<div id="txtHint"></div>
</body>
</html>
这是我的简化 PHP 文件:
<!DOCTYPE html>
<html>
<body>
<?php
$check = $_GET['u'];
if(isset($check)){
echo 'True';
}else{
echo 'False';
}
?>
</body>
</html>
【问题讨论】:
-
你为什么在这里使用ajax而不只是提交表单?
-
“我的服务器不能使用 post 方法”。除非您有非常不寻常的设置,否则这听起来不太可能。查看服务器端的
$_POST变量将获得通过POST 提交的任何内容。无论如何,当你说“有麻烦”时,你到底是什么意思?变量是否肯定在您的 ajax 请求中发送(您可以检查浏览器的网络选项卡以查看请求详细信息)?通话是否成功完成?什么会被退回?如果您真正想要返回的只是“true”或“false”,那么将所有<html>等标签都包含在您的 PHP 文件中是没有多大意义的。 -
首先,阿迪森说了什么。其次,不要使用
u.value,而是需要获取boolean的值来查看它是否被选中,所以解析一个u.checked返回的boolean。您可以console.log(u.checked),然后在发送前检查您的控制台(F12或Cmd+Alt+I)以查看结果。 -
感谢大家的回复! @nogad 我正在使用 Ajax 和 PHP,因为这是一个更大的项目的一个大大简化的部分,我正在学习使用 Ajax 仅更新页面的一部分,并且我正在学习编写 PHP 脚本。因此,脱离上下文它看起来确实有点傻,但我认为这对于更大的项目是有意义的。最后,让 u.checked 成功了。 (我不知道可以在 htmlInputElements 上查询的各种属性,但我找到了文档,现在它更有意义了..)
-
@ADyson 关于我在使用 POST 方法时遇到的问题,在我的表单提交行中使用 method="post" 时出现“405 Method Not Allowed”错误。
<form method="post" onsubmit="return showUser(this.checkboxID)">我不能说我明白为什么会这样。我认为这意味着我的服务器未设置为允许 POST 请求,但我没有看到任何影响服务器选项的选项。
标签: javascript php ajax xml forms