2

初めて ajax フォームを作成しようとしていますが、うまくいきません。POST メソッドを使用していくつかの値を .php ファイルに送信し、いくつかの計算を行い、結果を取得することになっています。何らかの理由で、php コードで値を取得する方法が見つかりません。print_r ($_POST) を使用すると、フォームに挿入されたすべての値を確認できますが、$_POST['input_name'] を使用してそれらを取得しようとすると、「未定義のインデックス」エラー メッセージが表示されます:SI don't know what I間違っているので、助けていただければ幸いです。私が使用しているコードは次のとおりです。

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)

4

3 に答える 3

1
if(isset($_POST[$largo1]) && !empty($_POST[$largo1])){

$largo1 はその行より上のどこかに定義されていますか? 多分それは $_POST['largo1'] であるはずです)。他の人も同じ

于 2012-12-19T07:23:51.533 に答える
0

PHP で POST データを取得するには、フォーム コントロールの名前と一致する名前のキーにアクセスする必要があります$_POST(または、JS を使用してフォーム データを手動で作成する場合は同等の名前です)。

たとえば$_POST['foo']

変数を使用しています — $_POST[$foo]— これは (複雑すぎる方法ではありますが) の場合$foo = 'foo'に機能しますが、設定したという兆候はまったくありません$foo

于 2012-12-19T07:24:39.987 に答える
0

まず、あなたの質問に答えようとしています:

フォームで送信されたデータを適切に出力すると言うprint_r($_POST)ので、問題はこれらの変数にアクセスする方法にあるはずです。使用するフォームフィールド 'largo1' にアクセスする$_POST['largo1']などです。なら$largo1 = 'largo1'使ってもいい$_POST[$largo1]です。違いを見ます。

また、jQuery を使用しているので、フォームからデータを収集するだけでなく、ajax 呼び出しを置き換えることができるjQuery.getとメソッドを調べてください。.serialize

http://docs.jquery.com/

于 2012-12-19T07:28:48.760 に答える