2017-06-18 43 views
0

我创建了一个多步表单,我可以在其中编写表单名称,在表单中添加步骤和输入类型,然后生成一个数组或对象(我不确定哪个一个在我的情况下将是最好的),通过这些步骤循环并获取每个输入类型的信息等。最后,通过Ajax将该对象或数组发送到PHP。创建对象或数组来处理多步表单

现在,我正在尝试生成数组或对象,因为我不确定哪一个是最好的,也不知道如何生成它。

我想我需要的,应该是:

var form = { 

    idForm: "form-" + Date.now(), 
    name: whatever you want, //get from the form 
    steps: { 
     0: { 
      idStep: "step-" + Date.now(), 
      name: get from form, 
      fields: { 
       0: { 
        idField: "field-" + Date.now(), 
        label: field 1, 
        placeholder: Enter data, 
        name: field 1, 
        required: true, 
        type: text, 
        options: {...} // this one should be added if type is a select, radio or checkbox. 
       }, 
       1: {...}, 
       2{...} 
      } 
     }, 
     1: {...}, 
     2: {...} 
    } 

} 

如何产生的呢任何暗示?任何提示是可喜的。

编辑: 一些研究,我终于可以生成我上面的对象后,我不得不做出一个正常的循环,通过步骤获得我需要的每个信息(使用jQuery。每()) 。所以要填充对象我做了这样的事情:

formObj = {} // create an object 

//create the node 'form' in the object and populate with id and name. 
formObj.form = { id: "form-"+Date.now(), name: formName.val() }; 

//then create an array of steps inside the form node    
formObj["form"]["steps"] = []; 

等等,这样我生成的对象。

当我做在PHP的print_r检查:

Array 
(
    [form] => Array 
     (
      [id] => form-1497888655149 
      [name] => formulario 1 
      [steps] => Array 
       (
        [0] => Array 
         (
          [name] => step 1 
          [idStep] => step-1497886778424 
          [fields] => Array 
           (
            [0] => Array 
             (
              [idField] => input-1497886779390 
              [label] => txéxt1 
              [name] => null 
              [required] => true 
              [type] => text 
              [options] => null 
             ) 

           ) 

         ) 

       ) 

     ) 

) 
+0

*无论你想要*会抛出语法错误。至少提供一个有效的表格树... –

+0

@Jonasw你的意思是?因为我忘记了逗号? –

+0

周围有很多表单生成器脚本...检查它们如何工作 – charlietfl

回答

1

建议:JSON

由于两个PHP和JavaScript有着完全兼容JSON的能力,以及JSON用于传递数据通过HTTP是伟大的,我亲自使用它很容易。

说你的JS对象看起来像;

var foo = { "a": 1, "b": 2, c: [ 1, 2, 3, { erm: "dunno" } ] }; 

您可以简单:

JSON.stringify(foo); 

和得到的东西,如:

"{\"a\":1,\"b\":2,\"c\":[1,2,3,{\"erm\":\"dunno\"}]}" 

,你可以发送给你的PHP,它可以:

json_decode($foo, true); 

得到一个关联数组,如:

array (
    'a' => 1, 
    'b' => 2, 
    'c' => array (
     0 => 1, 
     1 => 2, 
     2 => 3, 
     3 => array (
      'erm' => 'dunno', 
     ), 
    ), 
) 

它可以在你所期望的所有方式,如果需要使用,则:

json_encode($foo, JSON_HEX_TAG | 
        JSON_HEX_APOS | 
        JSON_HEX_QUOT | 
        JSON_HEX_AMP | 
        JSON_UNESCAPED_UNICODE); 

就会把它回安全串一次。

JavaScript JSON on MDNPHP JSON on php.net

随意问更多的细节。

+0

非常感谢Fred的帮助,我明白你在推荐什么。现在我的问题是如何生成该对象,因为我不知道如何用步骤中的窗体,步骤和字段的信息填充它。 –

+0

目前,您只显示了一个名为“form”的示例对象符号。我是否有权假定你有一些HTML匹配?如果是这样,请告诉我们。如果不是,那就是我们需要开始的地方。其次,您需要阅读表单以创建要发送的对象,或者只需提交urlencoded表单(几十年来几乎默认)。没有看到更多你正在使用的内容([最小示例](https://stackoverflow.com/help/mcve)),几乎不可能进一步指导你。仅供参考:我很快就会睡觉。 –

+0

是的,对不起,我忘了写这部分。无论如何,我终于可以生成该对象,并用Ajax将它发送给PHP,但是现在我不知道如何访问该信息,每次获得“数组到字符串转换”或“未定义偏移量:0” –