天天看点

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

前言

   忙的时候再一懒、再加上中途没能迅速解决一些问题,所以把文章拖延到了国庆,不过总算是在今天搞定了。这系列文章可能全部完成可能需要继续延后了,有计划继续写视频监控方面的文章,所以尽量合理安排吧 : )

系列

推荐

版本

ext 3.0

正文

一、截图和示例共用ext.formpanel

1.1  截图

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

由于本文主要关注的是表单提交的几种方式,所以仅用了一个表单项以便于测试和减少示例代码。

1.2  示例共用ext.formpanel

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    <script type="text/javascript">

        ext.onready(function() {

           ext.quicktips.init();

           ext.form.field.prototype.msgtarget = 'side';

            var form1 = new ext.formpanel({

                frame: true,

                renderto: ext.getbody(),

                title: '<center>表单提交</center>',

                style: 'margin-left:auto;margin-right:auto;width:500px;margin-top:8px;',

                labelalign: 'right',

                labelwidth: 170,

                buttonalign:'center',

                items: [new textfield('param2','表单项')]

            });

        });

    </script>

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

关于封装后的表单控件,可以参照系列的前几篇文章,也可以在后面的源代码里面找到相关的封装代码。

二、普通方式提交

适合一次操作页面,即提交后跳转到另外一个页面。

前台代码:

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

                    text: "普通方式",

                    handler:function(){

                        if(form1.form.isvalid()){

                            //只用指定textfield的id或者name属性,服务器端form中就能取到表单的数据

                            //如果同时指定了id和name,那么name属性将作为服务器端form取表单数据的key

                            var form = form1.getform().getel().dom;

                            form.action = 'submit.aspx?method=submit1&param1=abc';

                            //指定为get方式时,url中指定的参数将失效,表单项转换成url中的key=value传递给服务端

                            //例如这里指定为get的话,url为:submit.aspx?param2=你输入的值

                            //form.method = 'get';//get、post

                            form.submit();

                        }

                    }

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

代码说明:这段代码加在buttons:[{}]里面中。

后台代码:

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    /// <summary>

    /// post普通提交

    /// </summary>

    /// <returns></returns>

    public void submit1()

    {

        //数据库操作

        string param1 = request.querystring["param1"];

        string param2 = request.form["param2"];

        //response.write(string.format("param1(get):{0}<br />param2(post):{1}<br />", request.querystring["param1"], request.form["param2"]));

        //页面掉转

        response.redirect("esayadd.aspx");

    }

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

     普通提交我也翻阅了不少文章,在3.0版本中可以如上实现比较简单,或者直接设置formpanel的standardsubmit:true属性,则下面默认ajax提交方式也将变成普通的表单提交。注意这里并不需要设置 onsubmit: ext.emptyfn等,表单项的id和name指定也在注释里面有说明了。

三、ajax方式提交

3.1  默认方式

客户端代码:

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

                    text: "默认方式",

                    handler:function(){ 

                        form1.getform().submit({

                            url:'submit.aspx?method=submit2&param1=abc',

                            //method:'post',

                            //waittitle : "提示",

                            //waitmsg: 'submitting your data

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

',

                            success: function(form, action){

                                alert(action.response.responsetext);

                            },

                            failure: function(form, action){

                                alert(action.result.errormsg);

                            }

                        });

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

服务器端代码:

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    /// 默认方式

    public void submit2()

        //必须返回josin形式数据

        response.write("{success:true}");

        response.end();

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

代码说明:

a).  服务器端必须返回json格式,success返回true则执行success: function(form, action)里面的代码,返回false则执行failure: function(form, action)中的代码。

b).  服务器端必须response.end();

写测试代码的时候就是因为没有按这个格式返回,一直以为客户端代码是否有问题,耽误了挺多时间。

3.2  通过ext.data.connection提交数据

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

                    text: "connect方式",

                        //注意

                        var conn = new ext.data.connection();

                        conn.request({

                            url: 'submit.aspx?method=submit4',

                            //此处与params对应,如果为post,则服务器端从request.form中可以取得到数据,反之从querystring中取数据

                            method: 'post',//get

                            params:form1.form.getvalues(),

                            success: function(response, opts) {

                                 msginfo(response.responsetext);

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]
ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    /// connect方式

    public void submit3()

        response.write("ok");

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

这里就没有限制返回的数据格式了,但仍需要设置response.end(),所以默认在pagebase里面设置了此代码。

3.3  通过ext.ajax提交数据

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

                    //ext.ajax是继承ext.data.connection而来

                    text: "ajax方式",

                        ext.ajax.request({

    url: 'submit.aspx?method=submit3',

    method: 'post',

    //jsondata://指定需要发送给服务器端的json数据。如果指定了该属性则其它的地方设置的要发送的参数值将无效。

            //xmldata://指定用于发送给服务器的xml文档,如果指定了该属性则其它地方设置的参数将无效。

            params:form1.form.getvalues(),//取得key/value对象数组

            //指定ajax请求的回调函数,该函数不管是调用成功或失败,都会执行。

            callback: function (options, success, response) {

          if(success){

        msginfo(response.responsetext);

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]
ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    /// ajax方式

    public void submit4()

        response.write("yes");

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

ajax方式提交总结:

a).  服务器端处理返回数据后都需要response.end();

b).  很明显,ajax的特点之一就是不刷新页面,提高用户体验。

c).  回调分为callback和success+failure两种方式,后面是将前面的拆成2个函数来处理。

四、下载

<a target="_blank" href="http://files.cnblogs.com/over140/2009/10/extjs2009-10-2.rar">extjs2009-10-2.rar</a>

结束语

关于本章的内容项目的时候研究不多,一般够用就没有再深究,这里比较多的是搜集而来然后进行整理实践再写出来的,难免不全,欢迎大家补充 :)

转载:http://www.cnblogs.com/over140/archive/2009/10/02/1573948.html

继续阅读