将数据数组从表单传递到 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 发布文件的主要内容,如果未能解决你的问题,请参考以下文章
将数组数据从视图传递到控制器并反向 php codeigniter