0

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 />";

セクションの 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」、「お気に入りの黄色のバナナ形の果物」、「年齢」など)。例えば)。

ありがとうございました

4

4 に答える 4

2

ajaxリクエストでデータを送信していない場合、これは機能するはずです:

 var dataString = $('form').serialize();
    xmlhttp.send(dataString);
于 2012-11-25T17:22:28.433 に答える
0

jquery は、この種の複雑でデバッグしにくいコードを回避するために存在します。

次のようなものを使用します。

$.ajax({
  url: "test.html",
  data: {data:yourdata}
}).done(function() { 
    //your success function
});

以上です。

于 2012-11-25T17:21:11.230 に答える
0

HTML フォームのようにデータを POST するには、setRequestHeader() で HTTP ヘッダーを追加します。send() メソッドで送信するデータを指定します
ここであなたの場合send();は空です。それが空の $_POST 配列を取得している理由です

于 2012-11-25T17:17:50.113 に答える
0

リクエストでデータを送信していません! XMLHttpRequest は、フォーム データを自動的にキャプチャしません。渡したい変数を明示的に指定する必要があります。JavaScript を使用してフォーム フィールドの値をキャプチャし、それらをクエリに文字列で入力してから、.php を使用して PHP スクリプトに渡す必要がありますxmlhttp.send()

次のようなものを試してください:

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");
于 2012-11-25T17:17:04.413 に答える