我正在尝试使用post方法将表单数据发送到PHP脚本。因为字段的数量和名称是可变的,所以我遍历$ _POST数组。将表单“直接”发送到PHP文件时,它工作得很好,但出于不同的原因,我需要/希望让PHP脚本在后台运行,而不需要重新加载表单的页面。所以我尝试使用AJAX ......但是当脚本执行时,$ _POST数组为空。
这是我用来简单回显表单输入的PHP文本脚本(process_form_fields.php):
echo "DEBUG: Script Output start.<br />";
foreach($_POST as $name => $value)
{
echo "DEBUG: $name = $value <br />";
}
echo "DEBUG: End of script output.<br />";
sdection中的JavaScript / AJAX代码如下所示:
<script type="text/javascript" language="javascript">
xmlhttp = new XMLHttpRequest();
function process_form()
{
xmlhttp.onreadystatechange =
function()
{
if(xmlhttp.readystate == 4)
{
document.getElementById("status_message_box").innerHTML = xmlhttp.responseText;
}
else
{
document.getElementById("status_message_box").innerHTML = "<i>loading (status:" + xmlhttp.status + xmlhttp.responseText + ")</i>";
}
}
xmlhttp.open("POST", "http://mydomain.com/modules/process_form_fields.php", true);
xmlhttp.send();
}
</script>
这就是表格的样子:
<form action="process_form_fields.php" method="post" class="niceform">
<input type="submit" value="submit">
<div class="set_options">
<dl>
<dt>
<label for="1">Option 1:</label>
</dt>
<dd>
<select size="1" name="Option 1" id="Option 1">
<option value="Alpha">Alpha (1pt)</option>
<option value="Beta">Beta (5pt)</option>
<option value="Gamma">Gamma (20pt)</option>
</select>
</dd>
</dl>
<dl>
<dt><label for="2">Option 2:</label></dt>
<dd>
<select size="1" name="Option 2" id="Option 2">
<option value="Red">Red (0pt)</option>
<option value="Blue">Blue (0pt)</option>
</select>
</dd>
</dl>
<dl>
<dt>
<label for="3">Option 3:</label>
</dt>
<dd>
<select size="1" name="Option X" id="Option X">
<option value="Foo">Foo (-5pt)</option>
<option value="Bar">Bar (42pt)</option>
</select>
</dd>
</dl>
</form>
将表单直接发送到PHP文件会创建以下输出,就像它应该一样:
DEBUG: Script Output start.
DEBUG: Option 1 = Alpha (1pt)
DEBUG: Option 2 = Blue (0pt)
DEBUG: Option X = Bar (42pt)
DEBUG: End of script output.
使用上面的AJAX只输出:
DEBUG: Script Output start.
DEBUG: End of script output.
我想我可能会在这里遗漏一些简单的东西,但是我太盲目了,不能指责它。我希望有人能指出我正确的方向。 重要的是,HTML表单具有可变数量的字段,并且这些字段没有以任何方式编号/序列化(可以是“选项1”,“选项2”,“最喜欢的黄色香蕉形状水果”和“年龄”例如)。
谢谢
答案 0 :(得分:2)
您没有使用ajax请求发送数据,这应该有效:
var dataString = $('form').serialize();
xmlhttp.send(dataString);
答案 1 :(得分:0)
您没有根据您的要求发送任何数据! XMLHttpRequest不会自动捕获表单数据。您必须明确说明您想要传递的变量。您必须使用javascript来捕获表单字段的值,将它们串入查询,然后使用xmlhttp.send()
将其传递给PHP脚本。
尝试类似:
xmlhttp.open("POST","http://mydomain.com/modules/process_form_fields.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("option1=A&option2=B&option3=C");
答案 2 :(得分:0)
To POST data like an HTML form, add an HTTP header with setRequestHeader(). Specify the data you want to send in the send() method:。
在你的情况下,send();
为空,这就是为什么你得到一个空的$ _POST数组
答案 3 :(得分:0)
jquery可以避免这种复杂且难以调试的代码。
使用类似的东西:
$.ajax({
url: "test.html",
data: {data:yourdata}
}).done(function() {
//your success function
});
就是这样。