创建对象或数组以处理多步表单
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 不工作的原因(访问部分),我们必须查看它。可能有多种原因。以上是关于创建对象或数组以处理多步表单的主要内容,如果未能解决你的问题,请参考以下文章