我正在尝试制作我的第一个ajax表单,但我无法使其正常工作。它应该使用POST方法将一些值发送到.php文件,进行一些计算并检索结果。出于某种原因,我无法找到获取PHP代码中的值的方法。当我使用print_r($ _POST)时,我可以看到表单中插入的所有值,但如果我尝试使用$ _POST ['input_name']获取它们,则会显示“未定义的索引”错误消息:SI不知道我是什么我做错了所以任何帮助将不胜感激。 这是我正在使用的代码:
的JQuery / AJAX:
$().ready(function() {
$("#formulario").validate();
});
function calcularR(){
if ($('#formulario').valid() )
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("calculo").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","calcularT.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var form = document.getElementById('formulario');
var formData = new FormData(form);
xmlhttp.send(formData);
}
}
HTML:
<form id="formulario" name="formulario" method="post" action="enviarR.php" enctype="application_x-www-form-urlencoded">
<div id="bulto1" class= "bult1">
<label class="form-label-top" id="label_alto" >Alto (cm)</label>
<input type="text" class="required" id="alto1" name="alto1" size="21" maxlength="6" value = "" />
<label class="form-label-top" id="label_largo" for="input_26">Largo (cm)</label>
<input type="text" class="required" id="largo1" name="largo1" size="21" maxlength="6" value = "" />
<label class="form-label-top" id="label_ancho" for="input_27">Ancho (cm)</label>
<input type="text" class="required" id="ancho1" name="ancho1" size="21" maxlength="6" value = "" />
</div>
<input type="button" name="calcular" id="calcular" value="Calcular" onclick="calcularR()">
<input type="submit" name="enviar" id="enviar" value="Entrar">
</form>
<div id="calculo" name="calculo"><b> </b></div>
PHP(calcularT.php)
if(isset($_POST['largo1']) && !empty($_POST['largo1'])){
$largo = $_POST['largo1'];
if(isset($_POST['ancho1']) && !empty($_POST['ancho1'])){
$ancho = $_POST['ancho1'];
if(isset($_POST['alto1']) && !empty($_POST['alto1'])){
$alto = $_POST['alto1'];
$t = calcularP($largo, $ancho, $alto);
echo "Resultado: ".$t."<br/>";
}else{
echo "alto required <br/>";
}
}else{
echo "ancho required<br/>";
}
}else{
echo "largo required<br/>";
}
这只是代码的一部分。首先,我尝试使用
发送表单数据var alto = document.getElementById("alto").value;
var ancho = document.getElementById("ancho").value;
xmlhttp.send("alto="+alto+"&ancho="+ancho);
而不是
var formData = new FormData(form);
xmlhttp.send(formData);
它工作得很好,但表单有更多输入,其中一些并不总是发送,所以我认为最好使用formData,但正如我所说,我找不到获取值的方法在PHP代码中。 在此先感谢,请原谅我的基本/坏英语(这不是我的母语。我也在学习:P)
答案 0 :(得分:1)
if(isset($_POST[$largo1]) && !empty($_POST[$largo1])){
是$ largo1被定义在该行之上的任何地方?也许它应该是$ _POST ['largo1'])。其他人也一样
答案 1 :(得分:0)
要在PHP中获取POST数据,您需要访问$_POST
的键,其名称与表单控件的名称相匹配(或者在使用JS手动构建表单数据时等效)。
例如$_POST['foo']
。
您正在使用变量 - $_POST[$foo]
- 如果$foo = 'foo'
可以使用变量(虽然过于复杂),但没有迹象表明您已设置$foo
。< / p>
答案 2 :(得分:0)
首先,试着回答你的问题:
您说print_r($_POST)
正确输出表单中提交的数据,因此问题必然在于您如何访问这些变量:访问表单字段'largo1'您使用$_POST['largo1']
等等。如果$largo1 = 'largo1'
,则可以使用$_POST[$largo1]
。看看差异。
此外,当您使用jQuery时,请查看jQuery的.get
和.serialize
方法,因为它们可以替换您的ajax调用以及从表单中收集数据。