【问题标题】:Pass array of data from form, to ajax, to PHP post file将数据数组从表单传递到 ajax 到 PHP 发布文件
【发布时间】:2019-06-26 06:15:22
【问题描述】:

我会尽量保持简短。 我有一个表单,其输入字段(其中 54 个)自动填充数据库中的数据。使用 PHP while 循环为每个输入字段的 ID 分配一个 ID。用户可以编辑值并单击提交。提交表单时,数据将传递到 jquery 中的数组。我希望能够通过 POST 将该数组从 ajax 传递到 PHP。

表单/提交页面

$settings = array();
$counter = 0;

if(mysqli_num_rows($result) > 0){
    while($row = mysqli_fetch_assoc($result)) {
        $settings[$counter] = $row['value'];

        echo "<tr>
                <td>" . $row[$settings] . "</td>
                <td><input type=\"text\" id=\"" . $counter . "\" value=\"" 
                                 . $settings[$counter] . "\"></td>";
        counter++;
    }
}

mysqli_close($svr_link);

jQuery 脚本(在表单/提交页面内)

    $('#update').click(function(event) {
    event.preventDefault();

    var settings = [];
    for (i=0; i<55; i++) {
        settings[i] = $('#' + i).val();
    }

    $.ajax({
        type: "POST",
        url: "pages/post.php",
        data: {settings:settings},
        success: function(data) {
            $('#message').html(data);
        }
    });
});

我的问题是:

  1. 我是否在 ajax 调用中正确设置了该数据数组?

  2. post.php文件中的数据数组如何拉取和处理?

如果我遗漏了相关内容,请告诉我

【问题讨论】:

  • 如果传递正确,PHP中的数据将在$_POST数组中。
  • 所以我在 ajax 调用中正确地创建了 $_POST 数组?如何在 PHP post 文件中解析它?
  • 你必须在你的print_r($_POST) 看到你有什么。您可能需要考虑在发送之前将数组转换为 JSON,然后在 PHP 端解码 JSON 以进行解析。
  • 只是出于好奇,与我一样将其作为数组传递相比,将其编码为 JSON 是否有优势?
  • 知道了,谢谢!!

标签: javascript php jquery ajax mysqli


【解决方案1】:

如果您以 JSON 格式发送数组数据,建议在客户端设置的 ajax 中设置 dataType

$.ajax({
    type: "POST",
    url: "pages/post.php",
    dataType: 'json',
    data: {settings:settings},
    success: function(data) {
        $('#message').html(data);
    }
});

在服务器端,使用json_decode 函数获取数组,这样您就可以轻松处理数据。应该是这样的:

json_decode($_POST['settings'], true);

【讨论】:

  • 这是一个错字,我的错。我在查看我的另一台计算机时重写了代码。它在我的代码中显示为i
  • 小心,dataType 设置是您期望从服务器返回的数据类型,根据jQuery documentation。我从来没有测试过,但我想如果你想在请求内容中发送 JSON,你必须设置 contentType: 'json' 然后在 data 设置中传递 JSON 字符串
【解决方案2】:

为数组形式的所有输入添加name属性

while($row = mysqli_fetch_assoc($result)) {
        $settings[$counter] = $row['value'];

        echo "<tr>
                <td>{$row[$settings]}</td>
                <td>
                    <input 
                        type=\"text\" 
                        id=\"{$counter}\" 
                        name=\"settings[{$counter}]\" 
                        value=\"{$settings[$counter]}\"
                        >
                </td>";
        counter++;
    }

然后在表单中添加一个id(如果你没有表单标签,将id放在一些包含所有输入的HTML元素上,比如table),广告依赖jQuery @987654326 @

let data = $('#formId').find(':input').serializeArray();

所以,你的代码变成了:

$('#update').click(function(event) {
    event.preventDefault();

    let data = $('#formId').find(':input').serializeArray();

    $.ajax({
        type: "POST",
        url: "pages/post.php",
        data: data,
        success: function(data) {
            $('#message').html(data);
        }
    });
});

jQuery.serializeArray()

将一组表单元素编码为名称和值的数组。

from jQuery.serializeArray() documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多