form表单数据序列化为json

世上没有最聪明的人,只有最懒的人,分享一个表单数据序列化为json数据,通过ajax提交数据就不用一个一个的去获取值了,用下面的方法一键取值,懒人必备利器

$.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 formdata = $("#formData").serializeObject();

控制台打印输出结果值:

console.log(JSON.stringify(formdata));

formdata得到的就是最终转为json数据的结果值,也就是最后ajax提交的数据,formDate就是form表单的id值,使用该方法提交数据需要给提交按钮加上监听事件,为了使用ajax提交表单数据,监听事件最后加上一个返回值,避免表单提交跳转

return false

分享一下我的例值,使用了layui框架:

//监听提交按钮-页面对应按钮提交
    form.on("submit(demo)",function (data) {
        layer.msg('确定提交?',{
            time: 20000, //20s后自动关闭
            btn: ['确定', '取消'],
            icon:0,
            yes:function (index) {
                //获取form表单数据
                var formdata = $("#formData").serializeObject();
                var stringJson = JSON.stringify(formdata);
                console.log(stringJson)
                $.post('地址',formdata,function (data) {
                    if (data.result==1){
                        layer.msg("提交成功",{
                            icon:1,
                            time:1000,
                        });
                        setTimeout(function () {
                            //获得当前窗口索引
                            var index=parent.layer.getFrameIndex(window.name);
                            //调用父类关闭窗口方法
                            parent.layer.close(index);
                        },1000)

                    } else {
                        layer.msg("提交失败",{
                            icon:0,
                            time:1000,
                        });
                    }
                });
                form.render();
                layer.close(index)
            }
        });
        return false;//防止表单数据提交页面跳转
    });

 

你可能感兴趣的:(日常记录,前端)