jQuery大神幫你做後台 - 存資料篇

jQuery大神幫你做後台 - 存資料篇

其實這篇有騙文章數的嫌疑

不過想了一想還是拆開來講比較清楚

 

上一篇說到怎麼用AJAX + PageMethod跟Server端要資料, 然後用統一的jQuery函式把值寫進去dom

接著呈現出要修改的詳細資料給使用者看

 

 

而等使用者修改完後按了儲存

 

用舊的寫法自然可以用AutoPostBack很簡單的直接在Server端操作TextBox的資料

但是假如我們想要用Ajax要怎麼做呢?

 

 

先來釐清一下概念

(組成obj) –> 透過AJAX跟JSON把obj丟到Server端 –> Server端接到obj之後怎麼處理是他家的事 –> 告訴Client端說儲存成功還是失敗

 

基本上後面的東西都很清楚, 就是前面說的怎麼用jQuery AJAX, JSON, PageMethod互相溝通而已

但是要怎麼組成obj呢

 

其實也可以利用jQuery加上java script匿名型別的特性

我們可以寫出這個UI


$.makeObj = function (container) { //將containers內的input轉成object
    var $container = $(container);
    var obj = {};
    $container.find(':text,textarea').each(function () {
        var $this = $(this);
        var id = $this.attr('id');
        if (!id || id.length < 4) return;
        id = id.substr(3); //習慣textbox以txt開頭
        obj[id] = $this.val();
    });

    $container.find('select').each(function () {
        var $this = $(this);
        var id = $this.attr('id');
        if (!id || id.length < 4) return;
        id = id.substr(3); //select以ddl開頭
        obj[id] = $this.val();
    });

    $container.find(':radio:checked').each(function () {
        var $this = $(this);
        var id = $this.attr('name');
        if (!id || id.length < 4) return;
        if (obj[id] == undefined) {
            id = id.substr(3); //習慣radiobutton以rbl開頭
            obj[id] = $this.val();
        }
    });

    return obj;
};

 

先簡單說明一下這個UI的運作流程,  也是一樣給他一個區域

接著jQuery會自動去掃出每一個select, input

 

接著先宣告一個空的obj  var obj = {};

然後用js可以直接指定值給屬性名稱來增加屬性的特性

 

用obj[{attr}] = val的方法

把每一個input的id處理成正確的屬性名稱, 接著把val指進去

 

最後就組好一個obj,   把這個obj丟給PageMethod就可以


var obj = $.makeObj('#editArea');
$.ajax({
	url: '{PageName}.aspx/Save',
	data: $.toJSON({ obj }),
	beforeSend: lockEdit,
	complete: unlockEdit,
	success: function (data) {
		//do Something If Success or Failed
	}
});

 

基本上命名規則定好, 每一頁都可以用這支UI

而假如有些比較特殊的屬性沒辦法直接用makeObj就組好

 

一樣可以在組好後的obj在手動加上即可

var obj = $.makeObj(‘#editArea’);

obj.xxx = another();//by頁面加進去的參數

 

 

而或許有人會問, 這樣會不會多組了不需要的屬性

 

前面幾篇有說, .NET的自動parseJSON功能很優秀

屬性不要完全符合

 

Server類別       (沒傳來的屬性自動放預設值)

Client端物件   (Server端沒有的屬性自動忽略)

 

所以要特別確認Id是不是有mapping到, 不然可能丟null職過去自己都不知道

 

而會出錯的可能性多半是在格式不正確,  例如Server端類別的屬性A是Int32,  卻丟一個String過去,  那穩錯的

 

 

這些程式都是一個方向或是參考

希望能跟各方高手交流,  有哪些可以改進或著加強的地方

 

一起讓我們的程式寫的更漂亮

 

 

下一篇是我最沒自信的作品,  jQuery大神幫你做後台 - 驗證篇

 

請…不要太期待   orz

 

--

本文可能有理解錯誤  或不盡不實的地方

請路過的前輩不要客氣  用力打醒

這會是我們成長的主要養分