xmlhttp.send()和PHP $ _POST []

时间:2012-12-19 07:19:58

标签: php jquery ajax

我正在尝试制作我的第一个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)

3 个答案:

答案 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调用以及从表单中收集数据。

http://docs.jquery.com/