php - 使用 AJAX 发送具有可变字段数的表单,$_POST 数组为空

标签 php javascript ajax forms

我正在尝试使用 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”、“最喜欢的黄色香蕉形状水果”和“年龄”)例如)。

谢谢

最佳答案

您没有通过 ajax 请求发送数据,这应该有效:

 var dataString = $('form').serialize();
    xmlhttp.send(dataString);

关于php - 使用 AJAX 发送具有可变字段数的表单,$_POST 数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553329/

相关文章:

php - Doctrine DQL、类表继承和访问子类字段

php - 创建用于呈现公共(public)页面的自定义模板

javascript - 使用 Browserify 全局覆盖 Backbone 同步

javascript - 固定滚动内容

javascript - 为我的 XMLHttpRequest 文件上传添加文件大小限制

javascript - 将 JSON 对象传递给 Java 类,而不使用 servlet

PHP 和 MySQL : Using a 'NOT NULL AUTO_INCREMENT' on a table that truncates

php - 上传与唯一 ID 关联的多个图像的过程

javascript - Ace 编辑器和最小化文件

php - 无法让 ajax 发布工作