创建对象或数组以处理多步表单

Posted

技术标签:

【中文标题】创建对象或数组以处理多步表单【英文标题】:Create object or array to process a multistep form 【发布时间】:2017-11-20 16:57:12 【问题描述】:

我正在创建一个多步骤表单,我可以在其中编写一个表单名称,将步骤和输入类型动态添加到表单中,然后生成一个数组或对象(我不确定在我的情况下哪个是最好的)从该表单开始,循环执行步骤并获取每种输入类型的信息等。最后,通过 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 .each())。所以为了填充对象,我做了这样的事情:

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
                                        )

                                )

                        )

                )

        )

)

【问题讨论】:

whatever you want 会抛出语法错误。至少提供一个有效的表单树... @Jonasw 你是什么意思?因为我忘记了逗号? 周围有许多表单构建器脚本......检查它们是如何工作的 【参考方案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 MDN和PHP JSON on php.net

欢迎询问更多详情。

【讨论】:

非常感谢 Fred 的帮助,我了解您的建议。现在我的问题是如何生成该对象,因为我不确定如何使用来自表单、步骤和步骤中的字段的信息填充它。 此时,您只展示了一个名为“form”的示例对象表示法。我是否正确地假设您有一些 html 可以匹配?如果是这样,请告诉我们。如果没有,这就是我们需要开始的地方。其次,您需要阅读表单以创建要发送的对象,或者只需提交 urlencoded 表单(几十年来几乎是默认设置)。如果没有看到更多您正在使用的内容 (minimal examples),几乎不可能进一步指导您。仅供参考:我很快就会睡觉。 是的,对不起,我忘记写那部分了。无论如何,我终于可以生成对象并使用 Ajax 将其发送到 PHP,但现在我不知道如何访问该信息,每次我得到“数组到字符串转换”或“未定义偏移量:0 ”跨度> @DanielSoublett - 再次;为了帮助解决您的(可能)PHP 不工作的原因(访问部分),我们必须查看它。可能有多种原因。

以上是关于创建对象或数组以处理多步表单的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 对象数组发布到 mongodb?

错误:SequelizeValidationError:字符串违规:创建的不能是数组或对象

如何使用表单从数组动态创建复选框?

MS Access 对象(表格、报告)显示创建或修改日期

Django:使用自定义保存方法更新表单中的对象

创建和访问类对象的动态数组