使用 javascript 和 XMLHTTPRequest POST FormData 到 php
POST FormData to php using javascript and XMLHTTPRequest
目前我有两个文件,index.htm 和 accessdata.php。
这就是我在 index.htm:
中的内容
<html>
<head>
<script>
function postData() {
var xmlhttp=new XMLHttpRequest();
var url = "accessdata.php";
var checkBoxes_formData = new FormData(document.getElementById("checkBoxes"));
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(checkBoxes_formData);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
}
</script>
</head>
<body>
<button type="button" onclick="postData()">POST</button>
<form id=checkBoxes>
<table>
<tr><input type="checkbox" name="opt1" value="blue" checked> Blue</td>
<tr><input type="checkbox" name="opt2" value="yellow"> Yellow</td>
</table>
</form>
<p id="result"></p>
</body>
</html>
这就是我在 accessdata.php 中的内容:
<?php
$opt1=$_POST['opt1'];
echo $opt1;
echo "bla";
?>
现在,在
<p id="result"></p>
"bla" 出现,但 "blue" 或 "yellow".
未出现
我做错了什么?
下面是正确的 HTML 代码!!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>POST PHP XMLHTTPRequest</title>
<script>
function postData() {
var xmlhttp=new XMLHttpRequest();
var url = "accessdata.php";
var checkBoxes_formData = new FormData(document.getElementById("checkBoxes"));
xmlhttp.open("POST",url,true);
xmlhttp.send(checkBoxes_formData);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
}
</script>
</head>
<body>
<button type="button" onclick="postData()">POST</button>
<form id="checkBoxes">
<input type="checkbox" name="opt1" value="blue"> Blue
<input type="checkbox" name="opt2" value="yellow" checked> Yellow
</form>
<p id="result"></p>
</body>
</html>
点击创建笔记
你应该试试这个…
<form method=post action=accessdata.php>
<input type=checkbox value=blue name=opt1>blue
<input type=submit value=submit name=send>
</form>
在访问数据中。 PHP
if❨isset❨$_POST[`send']❩❩ {
$color=$_POST[`opt1'];
echo $color."bala";
}
blue
没有显示,因为您声称:
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
但是 FormData
objects 将数据编码为 multipart/form-data
。
删除显式设置 content-type 的代码,让浏览器为您生成。 (不要试图将其显式设置为 multipart/form-data
,您还必须指定 header 中的边界标记)。
yellow
没有出现是出于同样的原因,还因为:
- 您只查看
opt1
并且它与名称 opt2
和 关联
- 复选框控件只有在选中时才会成功(即会出现在提交的数据中)(默认情况下黄色控件不是)。
更复杂的是,您的 HTML 无效。 Use a validator。您不能将输入作为 table 行的 child,您需要在它们之间创建一个 table 数据单元格。 (请注意,看起来您正在尝试使用 table 进行布局,您可能应该完全摆脱 table)。
目前我有两个文件,index.htm 和 accessdata.php。 这就是我在 index.htm:
中的内容<html>
<head>
<script>
function postData() {
var xmlhttp=new XMLHttpRequest();
var url = "accessdata.php";
var checkBoxes_formData = new FormData(document.getElementById("checkBoxes"));
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(checkBoxes_formData);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
}
</script>
</head>
<body>
<button type="button" onclick="postData()">POST</button>
<form id=checkBoxes>
<table>
<tr><input type="checkbox" name="opt1" value="blue" checked> Blue</td>
<tr><input type="checkbox" name="opt2" value="yellow"> Yellow</td>
</table>
</form>
<p id="result"></p>
</body>
</html>
这就是我在 accessdata.php 中的内容:
<?php
$opt1=$_POST['opt1'];
echo $opt1;
echo "bla";
?>
现在,在
<p id="result"></p>
"bla" 出现,但 "blue" 或 "yellow".
未出现我做错了什么?
下面是正确的 HTML 代码!!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>POST PHP XMLHTTPRequest</title>
<script>
function postData() {
var xmlhttp=new XMLHttpRequest();
var url = "accessdata.php";
var checkBoxes_formData = new FormData(document.getElementById("checkBoxes"));
xmlhttp.open("POST",url,true);
xmlhttp.send(checkBoxes_formData);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
}
</script>
</head>
<body>
<button type="button" onclick="postData()">POST</button>
<form id="checkBoxes">
<input type="checkbox" name="opt1" value="blue"> Blue
<input type="checkbox" name="opt2" value="yellow" checked> Yellow
</form>
<p id="result"></p>
</body>
</html>
点击创建笔记 你应该试试这个…
<form method=post action=accessdata.php>
<input type=checkbox value=blue name=opt1>blue
<input type=submit value=submit name=send>
</form>
在访问数据中。 PHP
if❨isset❨$_POST[`send']❩❩ {
$color=$_POST[`opt1'];
echo $color."bala";
}
blue
没有显示,因为您声称:
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
但是 FormData
objects 将数据编码为 multipart/form-data
。
删除显式设置 content-type 的代码,让浏览器为您生成。 (不要试图将其显式设置为 multipart/form-data
,您还必须指定 header 中的边界标记)。
yellow
没有出现是出于同样的原因,还因为:
- 您只查看
opt1
并且它与名称opt2
和 关联
- 复选框控件只有在选中时才会成功(即会出现在提交的数据中)(默认情况下黄色控件不是)。
更复杂的是,您的 HTML 无效。 Use a validator。您不能将输入作为 table 行的 child,您需要在它们之间创建一个 table 数据单元格。 (请注意,看起来您正在尝试使用 table 进行布局,您可能应该完全摆脱 table)。