AJax技术

基于EasyUI的全站表单AJAX提交验证及返回值提示功能的实现

字号+ 作者:H5之家 来源:H5之家 2017-06-30 12:01 我要评论( )

在一个网站建设过程中,对表单的验证、返回信息处理等等常常会占据前端开发人员比较多的时间,有时候甚至会编写出一些总体功能相似的重复代码片段,这不得不让人

在一个网站建设过程中,对表单的验证、返回信息处理等等常常会占据前端开发人员比较多的时间,有时候甚至会编写出一些总体功能相似的重复代码片段,这不得不让人懊恼。

前段时间在一个项目中,通过对以往表单提交、验证、返回信息处理等功能的分析总结,编写了一个基于EasyUI的全站表单AJAX提交验证及返回值提示功能的通用方法。
伪代码形如:

formsubmit(dModule){

在一些表单中可能会出现联动选单,我们再编写一个联动选单的通用方法,形如:getUS(dModule);

在一些表单中可能会出现日历选框,我们再编写一个日历选框的通用方法,形如:calendar(dModule);

在一些表单中可能会出现颜色选框,我们再编写一个颜色选框的通用方法,形如:colorPicker(dModule);

定义提交时显示的提示信息;

定义处理结果返回时的显示信息,此信息为模板类型,可定义一些通配符,以便在得到具体返回值时进行替换;

定义弹出层及遮罩;

定义onsubmit事件处理函数,如fooaction(){

调用easyUI.checkForm进行表单验证;

定义提交的URL及提交的ARGS;

定义显示返回值方法,如showmsg(stype,msg);

定义显示失败值方法;

定义AJAX处理函数;

定义AJAX失败时函数;

调用easyUI.ajax.post方法提交表单

}

绑定表单onsubmit方法

}

之后,在每个页面进行调用:formsubmit(document.body);

(在每个页面进行调用不是让你去每一个页面上这么写一遍,记得用src方式引入JS文件即可 ^_^)

以后的页面编写中,就可以不用再去重复编写不同的表单提交处理函数了。

 

附源代码部分:

formsubmit:function(dModule){

    if(!dModule){return;}

    //联动部分,可根据项目需求自行编写通用方法

    sutil.getUS(dModule);

    //日历部分,可参照easyCalendar的使用方法

    sutil.calendar(dModule);

    //取色部分,可参照easyColorPicker的使用方法

    sutil.colorPicker(dModule);

    //处理提示

    var swaiting = '<div class="waiting"><img src="'+vIjcPath+'loading.gif" /> 请稍候,正在处理您的请求......</div>';

    //处理结果模板

    var sresult = '<div class="result"><div class="hd">$1</div><div class="bd"><div class="msg">$2</div></div></div>';

    //输出设备,遮罩、弹出层

    var dmask = sutil.mask;

    var dpopup = sutil.formpopup;

    dpopup.fixsize = true;

    dpopup.autofullsize = false;

    dpopup.setShadow();

    dpopup.onopen = function(){dmask.open();};

    dpopup.onclose = function(){dmask.close();};

    //onsubmit事件处理函数

    var fooaction = function(){

        //表单验证

        var bc = easyUI.checkForm(this);

        if(!bc){return false;}

        //取表单数据

        var scaption = this.getAttribute('caption');

        var dlms = this.elements,l = dlms.length-1;

        var surl = this.action,args = [];

        var dbtn = easyUI.getElementsBy('type','submit','button',this)[0];//取提交按钮

        var pn = '',pt = '';

        for(var i=0;i<l;i++){

        pn = dlms[i].name;

        pt = dlms[i].type;

        if((pt=='checkbox'||pt=='radio')&&!dlms[i].checked){continue;}

        args.push(pn+'='+encodeURI(dlms[i].value));

        }

        //提交过程中禁用提交按钮

        if(dbtn){dbtn.disabled = true;}

        //显示信息

        var showmsg = function(stype,msg){

        msg = msg.replace(/\\n/g,'<br/>');

        var stitle = scaption?scaption:'提交表单';

        var shd = (stype==1)?'<h3 class="error">错误!您提交的请求遇到了问题!</h3>':'<h3 class="success">您提交的请求已处理成功!</h3>';

        var sbox = sresult.replace(/\$1/g,shd).replace(/\$2/g,msg);

        dpopup.setTitle(stitle);

        dpopup.setContent(sbox);

        if(!dpopup.isopen){dpopup.open();}

        };

        //显示错误信息

        var fmsg = function(msg){

        showmsg(1,msg);

        if(dbtn){dbtn.disabled = false;}

        };

        //AJAX提交处理函数

        var cbfoo = function(xhr){

        if(!xhr){fmsg('数据处理失败!xmlhttp对象未就绪!');return;}

        var rtxt = xhr.responseText;

        if(!rtxt){fmsg('数据处理失败!服务器没有返回值!');return;}

        //返回值约定为code,descript,jumpUrl

        var astr = rtxt.split(','),scode = astr[0]||'20156',desc = astr[1],jump = astr[2];

        desc = desc?unescape(decodeURI(desc)):'未知错误!';

        jump = jump?unescape(decodeURI(jump)):false;

        if(isNaN(scode)){fmsg('数据处理失败!服务器返回值不正确!');return;}

        switch(scode){

            case '-1'://状态码code为-1时则显示成功信息

            showmsg(0,desc);

            //如果有跳转URL,则在关闭提示信息层后跳转

            if(!!jump){dpopup.onclose = function(){dmask.close();window.location = jump;};}

            break;

            default:

            fmsg('数据处理失败!'+desc+'!');break;

        }

        };

        //AJAX失败处理函数

        var ffoo = function(xhr){

        var sts = (xhr)?xhr.status:'20156';

        fmsg('数据处理失败!服务器错误,错误代码:'+sts+'!');

        };

        //AJAX提交

        dpopup.setTitle('正在处理您的请求');

        dpopup.setContent(swaiting);

        dpopup.open();

        easyUI.ajax.post(surl,args.join('&'),true,cbfoo,ffoo);

        return false;

    };

    //遍历所有dModule中出现的表单,并绑定onsubmit处理函数

    var dforms = easyUI.getElementsBy('qtype','ajax','form',dModule),l = dforms.length;

    for(var i=0;i<l;i++){

        dforms[i].onsubmit = fooaction;

    }

}

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ajax实现无刷新验证用户名是否存在

    ajax实现无刷新验证用户名是否存在

    2017-06-30 09:00

  • phpsession Ajax + PHP session制作购物车

    phpsession Ajax + PHP session制作购物车

    2017-06-29 13:00

  • Ajax长轮询 Ajax的用法总结

    Ajax长轮询 Ajax的用法总结

    2017-06-29 12:04

  • 【Struts2】Struts2学习(8) Ajax与Json

    【Struts2】Struts2学习(8) Ajax与Json

    2017-06-29 08:00

网友点评