我必须将一个二维JavaScript数组发送到PHP页面。
实际上,我正在开发一个表单构建器,用户可以在其中添加或删除字段
使用JavaScript(jQuery)添加(或删除)这些字段。当用户完成并点击“发布”按钮后,我必须获取所有相关字段并将它们发送到PHP页面,该页面将构建一个真实的表单。
我找到了一种方法,但我很确定它不是很干净:
addedFields = new Array();
$("#add-info .field").each(function() {
addedFields.push(new Array($(this).find('.name').val(), $(this).find('.type').val(), $(this).find('.size').val()));
});
基本上,“.field
”类对象为<tr>
,“.name
”,“.type
”和“.size
”对象为输入。
所以我得到一个[name, type, size]
数组,然后使用
addedFields = addedFields.join(";");
最后,我以这种方式转到PHP表单;
document.location.href = "create.php?addedfields=" + addedFields;
关于PHP代码,我使用explode()
函数创建了一个PHP数组:
$addedFields = explode(";", $_GET['addedfields']);
然后我再次对数组中的每个元素使用它:
foreach ($addedFields as $field) {
$field = explode(",", $field);
echo "<li>Field with name : '$field[0]', of '$field[1]' type and with a size of $field[2]</li>";
}
所以它有效,但看起来很脏......
答案 0 :(得分:1)
将这些输入字段放在表单元素中。使用JSON,如
var formData = $('form').serializeArray();
formData = window.JSON.stringifiy(formData);
$.post('address', {addedfields: formData}, function(){});
类似的东西应该在jQuery中做到。 在后端将JSON转换为对象并循环遍历。
答案 1 :(得分:1)
在PHP中使用自动数组功能:
var data = {};
$("#add-info .field").each(function(i) {
data['field['+i+'][name]'] = $(this).find('.name').val();
data['field['+i+'][type]'] = $(this).find('.type').val();
data['field['+i+'][size]'] = $(this).find('.size').val()]);
});
$.post("target.php", data);
然后在服务器端
var_dump($_POST['field']);
// array(
// 0 => array(
// 'name' => ...
// 'type' => ...
// 'size' => ...
// ),
// 1 => ...
编辑:稍微优雅的循环版本:
$("#add-info .field").each(function(i) {
for (attr in {name: 1, type: 1, size: 1}) {
data['field['+i+']['+attr+']'] = $(this).find('.'+attr).val();
}
});
答案 2 :(得分:0)
尝试使用JSON在PHP和JavaScript之间交互数据。
JSON内置于Javascript中,并且有一个非常棒的PHP库。检查一下。