天天看點

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

繼續閱讀