通过POST方法将Javascript中动态生成的复杂结构表单提交给PHP脚本

通过POST方法将Javascript中动态生成的复杂结构表单提交给PHP脚本,javascript,php,jquery,ajax,post,Javascript,Php,Jquery,Ajax,Post,我正试图找出通过POST方法将Javascript中动态生成的复杂结构表单提交给PHP脚本的最佳方法 表单具有这种层次结构: <div class="item"> <textarea class="subitem_textarea"></textarea> <input type="text"/> <input type="text"/> </div> <div class="item"> &l

我正试图找出通过POST方法将Javascript中动态生成的复杂结构表单提交给PHP脚本的最佳方法

表单具有这种层次结构:

<div class="item">
  <textarea class="subitem_textarea"></textarea>
  <input type="text"/>
  <input type="text"/>
</div>
<div class="item">
   <textarea></textarea>
  <input type="text"/>
  <input type="text"/>
  <input type="text"/>
</div>
项目的数量是可变的,并且不能预先知道,因为项目是由用户创建的。每个项目都有一个字段,但字段的数量可变,因为这些字段也是由用户创建的

我需要将表单的内容保存到数据库中,保存这种结构,因此PHP脚本必须能够知道哪个字段属于哪个项

我想一种方法是,在客户端Javascript+jQuery上,以这样的方式安排字段的名称,在服务器端PHP上,我可以找到答案。例如,使用Javascript+jQuery,我可以将在客户端动态生成的表单的HTML安排为:

<div class="item">
  <textarea name="textareas[0]"></textarea>
  <input type="text" name="texts[0][0]"/>
  <input type="text" name="texts[0][1]"/>
</div>
<div class="item">
  <textarea name="textareas[1]"></textarea>
  <input type="text" name="texts[1][0]"/>
  <input type="text" name="texts[1][1]"/>
  <input type="text" name="texts[1][2]"/>
</div>
然后,在服务器端,我可以通过检查$u POST数组来恢复PHP中的结构。但是,我不得不认为,我不应该用特定的方式命名字段,应该可以用更简单的方式恢复表单的内容和结构

例如,为了进行各种Ajax调用,我已经需要在填充时将动态创建的表单的内容和结构存储在Javascript对象中,在进行Ajax调用时使用JSON.stringify将其发送到服务器,并使用JSON_decode在PHP中恢复

例如,如果我在填充时将动态创建表单的内容和结构存储在Javascript对象中,为了进行需要这些信息的各种Ajax调用,我已经必须这样做了,也许我可以使用JSON.stringify将该对象发送到处理表单的PHP脚本,并使用JSON_decode在服务器端获得正确的数据结构,而无需麻烦。事实上,我想我甚至可以在用户单击submit按钮时进行另一个Ajax调用,而不是通过常规表单提交。但我不认为这是最佳实践,因为我在web开发方面没有太多经验,我想知道对于一个具有复杂结构的表单,通过POST方法在Javascript中动态生成PHP脚本的最佳实践是什么


编辑:我只是想澄清一下,因为比尔指出我没有说我打算对表单中的数据做什么,服务器端的PHP脚本将以保留结构的方式将数据存储在数据库中。

这是一个详细的问题,但您没有告诉我们如何使用这些收集的数据

如果它是用来存储和显示的,那么是的,您已经找到了最简单的解决方案,使用json对$\u POST数据进行编码

例如,如果您以后可能需要关系功能,比如查询通过输入字段发布的用户年龄,那么您应该考虑对数据进行预结构。使用jQuery/Javascript函数,首先将其转换为格式良好的Json,然后在服务器端解析Json,将每个输入字段插入到相应的数据库字段中

甚至,这违反了设计惯例和占用空间,我有时会将整个json存储在其他结构化数据库记录附近的单独字段中。新的DBMS可以处理json类型

为了向您展示一个示例,我使用此函数在预订系统中存储包含房间信息的预结构化json,我们可以在其中动态添加额外的房间:

function jss(){
    var json = {};
                json.rooms = $('.camera').map(function() {
            return {               

                max : $(this).find(".max").val()
              , arrange : $(this).find(".arrang").val()
               ,kids: $('[name^=enf]', this).map(function() {
                    return {
                        age: $(this).val()
                    };                    
                }).get()
               , adults: $('[name^=pers]', this).map(function() {
                    return {
                        name: $(this).val()

                    };                    
                }).get()
            };
        }).get();

        return JSON.stringify(json, null, "\t");
}

谢谢,我在问题中添加了一个注释来解释服务器端的PHP脚本将如何处理数据,即将数据存储在数据库中,并在我考虑之后立即显示它。但我仍然不确定如何将存储数据的Javascript对象(用json编码)发送到服务器。我不希望在表单中添加一个字段来存储整个json编码的对象,那么在提交表单时如何将其发送到PHP脚本呢?在向表单添加隐藏字段时,我从来没有遇到过问题!但如果有必要,可以使用Ajax发送json数据;谢谢正如我在问题中所说,我曾想过这样做,但我没有特别的理由认为这不是最佳做法。我想我现在就这么做,因为我确信这不是黑客行为:-在类似的情况下,我将与StackOverflow用户分享此方法的解释: