Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript二维数组到PHP_Php_Javascript_Jquery_Arrays - Fatal编程技术网

JavaScript二维数组到PHP

JavaScript二维数组到PHP,php,javascript,jquery,arrays,Php,Javascript,Jquery,Arrays,我必须向PHP页面发送一个二维JavaScript数组。 实际上,我正在开发一个表单生成器,用户可以在其中添加或删除字段。 使用JavaScript(jQuery)添加(或删除)这些字段。当用户完成并点击“发布”按钮时,我必须获取所有相关字段并将它们发送到一个PHP页面,该页面将使用它构建一个真正的表单。 我找到了一种方法,但我很确定它不是很干净: addedFields = new Array(); $("#add-info .field").each(function() { add

我必须向PHP页面发送一个二维JavaScript数组。 实际上,我正在开发一个表单生成器,用户可以在其中添加或删除字段。
使用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
”类对象是
,“
.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>";
}
foreach($addedFields作为$field){
$field=分解(“,”,$field);
echo“
  • 名称为“$Field[0]”、类型为“$Field[1]”、大小为$Field[2]”的字段; }

  • 所以它可以工作,但看起来很脏…

    将这些输入字段放在表单元素中。使用类似JSON的

    var formData = $('form').serializeArray();
    formData     = window.JSON.stringifiy(formData);
    
    $.post('address', {addedfields: formData}, function(){});
    
    类似的东西应该在jQuery中实现。
    在后端,将JSON转换为对象并循环。

    使用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();
      }
    });
    

    试着考虑使用JSON来在PHP和JavaScript之间交互数据。


    JSON内置于Javascript中,还有一个很棒的PHP库。查看它们。

    window.JSON
    不是跨浏览器的。真实的故事,因此一个简单的if(typeof(window.JSON)==“object”)应该会有所帮助。如果不可用,则实现javascript JSON解决方案。