搜尋
首頁後端開發php教程Ajax表單提交及後台處理簡單範例

Ajax表單提交及後台處理簡單範例

Jan 12, 2018 pm 01:26 PM
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,後台的類別有很多種,那麼至少我們能確定一個傳入參數了,傳出的就是相關類別。相關類?到底是哪一類還只有到了具體後台收集方法才知道。那麼,整理一下思路,現在有一個Dictionary要變成一個資料類,資料類到底是什麼有什麼樣的屬性?搞不清,但這個Dictionary的key(鍵)可以看做是這個資料類屬性集的一個子集,而這個Dictionary的value(值)是這個資料類屬性值toString()的子集。那樣這樣就好辦了。屬性集怎麼取?反射。這麼多類到底是哪個?不管它,泛型解決。

說下這麼多,貼下核心程式碼


#
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框架都已經早做了,考慮方面也比我這個全面得多,後台處理我這是基於我這種前台簡單收集弄的,很多第三方框架都有完整的體係了,但我這裡說的只是一種簡單的思路,當你一時沒有那麼多控件時是否能把這一條路簡單走通實現。當然我強烈建議不要重複造輪子,但要一定要明白輪子的核心作用和原理。

相關推薦:

#

JQuery打造PHP的AJAX表單提交實例_jquery

#Laravel 中使用Vue.js 實作Ajax表單驗證實例

#php中使用Session令牌防止Ajax表單重複提交

以上是Ajax表單提交及後台處理簡單範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境