基於Ajax表單提交及後台處理簡單的應用
下面我就為大家帶來一篇基於Ajax表單提交及後台處理簡單的應用程式。現在就分享給大家,也給大家做個參考。
首先先說下表單提交吧,要提交表單那麼就得先收集表單資料(至於驗證這個我就不說了,要說留下下次吧),有了jquery取個html的值還是簡單$("xxid").val()等就完了,但如果一張表單收集的資料很多,像這樣的表單又有很多張,那用此方法肯定麻煩死,並且容易眼花錄錯。所以,我們就可以簡單的來定義一個收集規則,如在要回傳到伺服器的資料表單控件,可以做個標記,到時取的時候把這些標記的資料一起取回去。
就拿最簡單的文體輸入做例子吧我們加一個"datafield"屬性,存入的值為對應伺服器相關類別的屬性名稱。有了這標記前台取資料就好辦了。
我們可以定個通用方法如下面程式碼
getFormData: function(formid) { var data = {}; //获取TEXT文件内容 $("#" + formid + " input[type=text]").each(function(i, o) { var jo = $(o); if (jo.attr("datafield")) { var str = jo.val(); str = str.replace(" ", ""); if (str !== "") { data[jo.attr("datafield")] = jo.val(); } } }); return data; }
這裡就是一個簡單的獲取表單裡面所有text文本,並放入到一個data物件裡面,至於其它表單控制值怎麼取我就不多說了,原理差不多。
那麼接下回就是把資料寄到伺服器上了,我這裡就直接用jquery帶的ajax。
var save = function(sender) { $(sender).prop("disabled", true); //禁用按钮,防止重复发送 var data = getFormData("form1"); var jsonobj = { jsondata: data }; var textdata = JSON.stringify(jsonobj); $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "xxxxx.aspx/Save", dataType: "json", data: textdata, success: function(msg) { if (msg.d == "1") { document.form1.reset(); alert("保存成功!"); } else if (msg.d == "0") { alert("保存失败!"); } }, complete: function(jqXHR, textStatus) { $(sender).prop("disabled", false); //还原按钮 } }); }
這裡的"xxxxx.aspx/Save"就是ajax處理頁面,它就是一個webmethod。做了一下防止客戶手速太快,服務處理太慢,重複點擊的處理。
這樣一個表單資料收集,回傳伺服器就完成了。這裡使用json2.js的JSON.stringify方法統一將物件轉成json字符,好處就是不用自己為拼json字符串而考慮json的格式問題,簡單乾淨。
那麼客戶已經把資料收錄好了,伺服器也該要處理資料了。我們從前台來的資料的鍵(json的key),不可能全部包含某個資料類別的所有屬性。而資料類別也有很多個,應該是哪一個類別只有伺服器才知道。所以這裡我們就需要寫一個幫助的轉換類別。這裡又有問題,有可能資料類別有很多個,難道我要為每一個類別寫一個方法,那不是個坑麼?所以我們分析下客戶端傳到服務端上的資料格式,它是一組鍵值對且不會重複,那麼就相當於一個Dictionary
說下這麼多,貼下核心程式碼
public static T1 UpdateObjectByDic<T1>(T1 scrobj, IDictionary<string, string> sourceobject, bool ignoreCase) where T1 : new() { T1 result = scrobj; PropertyInfo[] pifresults = typeof(T1).GetProperties(); foreach (var dic in sourceobject) { foreach (PropertyInfo pifresult in pifresults) { if (string.Compare(dic.Key, pifresult.Name, ignoreCase) == 0) { pifresult.SetValue(result, ChangeType(dic.Value, pifresult.PropertyType), null); break; } } } return result; } public static Object ChangeType(object value, Type targetType) { Type convertType = targetType; if (targetType.IsGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { NullableConverter nullableConverter = new NullableConverter(targetType); convertType = nullableConverter.UnderlyingType; } return Convert.ChangeType(value, convertType); }
我這裡T1 scrobj是把更新做在一起,如添加表單就傳個new的物件進來,如果是更新把單就把原表單資料傳進來。這裡順帶說下ChangeType方法,其它就是資料類別裡有些屬性是nullable的(int? DateTime?等)傳統的Convert.ChangeType會有異常所以就簡單改了下,ignoreCase就是屬性(前台那個datafield對應的值)查找是否處理大小寫(一般是不管大小寫的,要管大小寫相信會被前台口水流淹死)。
這樣後台資料處理核心就完了,呼叫部分程式碼也貼下
[WebMethod(EnableSession = true)] public static string Save(Dictionary<string, string> jsondata) { string result = "0"; Model.Project pro = ConvertHandle.UpdateObjectByDic< Model.Project>(jsondata,new Model.Project,true); pro.CreatorID = BLL.Sys_User.GetCurUser().ID.ToString(); pro.CreatorName = BLL.Sys_User.GetCurUser().Name; prohandle.Insert(pro); result = "1"; return result; }
這裡就是後台具體處理方法呼叫的核心使用了,prohandle.Insert(pro)將類別存入資料庫,pro.CreatorID,pro.CreatorName為專案的一些其它信息,這些就不說了。到這裡一個表單前台資料收集,後台處理,除了保存那塊以外,就都算完了,呵呵。
文章最後說下,這裡只是個簡單應用,像我說的這前台收集,很多前台js框架都已經早做了,考慮方面也比我這個全面得多,後台處理我這是基於我這種前台簡單收集弄的,很多第三方框架都有完整的體係了,但我這裡說的只是一種簡單的思路,當你一時沒有那麼多控件時是否能把這一條路簡單走通實現。當然我強烈建議不要重複造輪子,但要一定要明白輪子的核心作用和原理。
上面是我整理給大家的,希望今後對大家有幫助。
相關文章:
#以上是基於Ajax表單提交及後台處理簡單的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Discuz後台登入問題解決方法大揭秘,需要具體程式碼範例隨著網路的快速發展,網站建置變得越來越普遍,而Discuz作為一款常用的論壇建站系統,受到了許多站長的青睞。然而,正是因為其功能強大,有時候我們在使用Discuz的過程中會遇到一些問題,例如後台登入問題。今天,我們就來大揭秘Discuz後台登入問題的解決方法,並且提供具體的程式碼範例,希望能幫助到有需要

WordPress後台亂碼煩惱?試試這些解決方案,需要具體程式碼範例隨著WordPress在網站建置中的廣泛應用,許多用戶可能會遇到WordPress後台亂碼的問題。這種問題會導致後台管理介面顯示亂碼,對使用者的使用帶來極大困擾。本文將介紹一些常見的解決方案,幫助使用者解決WordPress後台亂碼的煩惱。修改wp-config.php檔案開啟wp-config.

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

MySQL事務處理:自動提交與手動提交的差異在MySQL資料庫中,事務是一組SQL語句的集合,要麼全部執行成功,要麼全部執行失敗,保證了資料的一致性和完整性。在MySQL中,事務可以分為自動提交和手動提交,其區別在於事務提交的時機以及對事務的控制範圍。以下將詳細介紹自動提交和手動提交的區別,並給出具體的程式碼範例來說明。一、自動提交在MySQL中,如果沒有顯示

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:
