我有一个大表单,拼接成 4 个 div,每个 div 代表一个步骤,所有内容都包含在一个表单中,我的问题是表单变得太大,因为可以添加新字段,(图片,文字,语言)动态,
所以我想知道是否有任何选项可以部分提交此表单,我的服务器每个帖子有 20 个字段的限制,我无法更改此设置
您总是可以将字段值打包到一个大的 json 数组中,对其进行编码并使用 jQuery.ajax 发布它。它看起来像一个大的单一领域。在服务器端,您可以对其进行解码,瞧,绕过了限制。但老实说,那是什么样的服务器?我以前从未听说过这种限制。
另一种解决方案是在服务器端复制表单的状态(例如,在会话存储中),并进行 ajax 调用以更新会话存储中的各个字段。例如,当用户离开一个字段时,您将该单个字段的值发布到服务器,然后服务器更新会话存储中的字段值。
可以有许多其他可能的解决方案。
如果服务器限制困扰您,您可以在 jSON 中序列化表单并将其作为单个参数传递
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
喜欢
var data = $("form#myform").serializeObject();
window.location = "url?data="+encodeURIComponent(data);
比在服务器上
$data = json_decode($_GET["data"]);
foreach($data as $row)
{
//Do What ever you want with $row
}
或者,如果您需要使用 $_POST
var post_data = { data : data};
$.post('url', post_data ,function(data) {
console.log(data);
});
您为什么不创建多个表单,与您拥有的每个步骤相关联?
@Cody 答案效果很好,但我在文件输入方面遇到了问题,
这个库http://jquery.malsup.com/form/也很好用,而且我能够提交文件并支持内部数组,无需任何更改