将数据数组从表单传递到 ajax 到 PHP 发布文件

Posted

技术标签:

【中文标题】将数据数组从表单传递到 ajax 到 PHP 发布文件【英文标题】:Pass array of data from form, to ajax, to PHP post file 【发布时间】: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);
        
    );
);

我的问题是:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于将数据数组从表单传递到 ajax 到 PHP 发布文件的主要内容,如果未能解决你的问题,请参考以下文章

Java数组,如何通过JSP表单将数组传递到后台?

将数组数据从视图传递到控制器并反向 php codeigniter

如何将图像文件和表单数据从 Ajax 传递到 MVC 控制器

如何通过ajax从表单发送POST数据数组?

将数组数组从 Ajax 传递给控制器

Form表单如何传递List数组对象到后台的解决办