JavaScript二维数组到PHP

时间:2010-05-06 13:17:08

标签: php javascript jquery arrays

我必须将一个二维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>";
}

所以它有效,但看起来很脏......

3 个答案:

答案 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库。检查一下。