ASP.Net 中操作Ajax


      有時候,越深入去了解一個點,越發覺得自己無知,而之前當自己曉得一兩個片面的點還洋洋自得,殊不知,這是多么諷刺,JQuery中有很多優勢,比如異步提交值,部分刷新,給用戶很好的體驗感。目前為止,大部分項目基本都是MVC開發,部分WebForm的項目逐漸被淘汰,恰巧當前維護是銀行多年前的古董項目,WebForm已許久不接觸, 趁此機會,總結下與Ajax的交互,雖然MVC與Ajax的交互更友好簡潔。

下面介紹常見的JQuery中對Ajax的應用 Load()、Ajax()、Get()、Post()、getJson()、getScript()

 jQery對Ajax操作進行了封裝,常見的 ajax()屬於最底層的方法,使用頻率很高的 $.post()、$.get() 是在最底層的基礎上又細分出來封裝的一層,因為其分別對應的ajax()中 type的 post、get。可簡單的理解為

  • GET - 從指定的資源請求數據。
  • POST - 向指定的資源提交要被處理的數據

  前台發送數據-->后台接收-->進行處理-->返回前台-->前台將值顯示在評論區

 為什么說是繞了一大圈,因為GET、POST 是有區別的,我這里為了統一寫DEMO,不免在用法上有畫蛇添足之嫌

 前台body內容總覽

<body>
    <form id="form1" runat="server">
    <div>
        姓名:<asp:TextBox ID="txtName" runat="server" ClientIDMode="Static"></asp:TextBox>
        <p></p>
        評論:<asp:TextBox ID="txtContent" runat="server" ClientIDMode="Static" TextMode="MultiLine"></asp:TextBox>
        <p></p>     
        <asp:Button ID="btnAjax" runat="server" Text="Ajax" ClientIDMode="Static"></asp:Button>
        <asp:Button ID="btnPost" runat="server" Text="Post" ClientIDMode="Static"></asp:Button>
        <asp:Button ID="btnGet" runat="server" Text="Get" ClientIDMode="Static" />
        <p></p>    
    </div>
        <div class="comment">評論區</div>
        <div id="resTest" title="content" style="height:auto"></div>      
    </form>
</body>

 1. Ajax()

   ①可以直接請求到后台中某個方法,而不必在后台Load事件中處理

   ②可以設置失敗時的函數

 前台界面:(PS:form表單下的ASP中button控件,默認類型值是submit,所以在前台方法下面都增加了 return false;下同)

$("#btnAjax").click(function () {
    $.ajax({
        type: "post",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: "WebForm1.aspx/ReceiveJson",
        data: "{'Name':'郎中令','Content':'200'}",
        success: function (data) {                                                                
            $("#resTest").append(data.d);                    
        },
        error: function () {
            alert("發送失敗");
        }
    });
    return false;
});

后台界面:

        //參數名必須與前台JSon鍵名一致
        [WebMethod]
        public static string ReceiveJson(string Name, string Content)
        {
            return  Name + "&nbsp" +DateTime.Now.ToString("yyyyMMdd HH:mm:ss")+ "<br /> " + "Content:" + Content;
        }

2. post() 主要用來區別get()

    ① 方式不同, 一般表單的提交中get請求會讓參數顯示在url 欄中進行傳遞,post請求是作為http消息的實體內容發送給后台

    ② 大小不同, get請求是以url 傳遞參數的,所以會有大小限制,而post則可以傳更多更大的數據

    ③ 安全性不同, get請求的數據會被瀏覽器緩存起來,可在歷史記錄中查看,對於密碼等某些信息會不安全

    前台界面:

$("#btnPost").click(function () {
    if ($("#txtName").val()!=""&&$("#txtAge").val()!="") {
        $.post("WebForm1.aspx", {
            Name: $("#txtName").val(),
            Content: $("#txtContent").val()
        }, function (data) {                       
            $("#resTest").append(data);
                       
        });
    }
    else {
        alert("界面中尚有文本框值未填寫");
    }
    return false;
});

3. get() 該說的前面都說了,用法以及參數結構和post()一樣,這里沒什么好講的

$("#btnGet").click(function () {
    if ($("#txtName").val()!=""&&$("#txtAge").val()!="") {
        $.get("WebForm1.aspx", {
            Name: $("#txtName").val(),
            Content: $("#txtContent").val()
        }, function (data,status) {
            $("#resTest").html(data);
        });
    }
    else {
        alert("界面中尚有文本框值未填寫");
    }
    return false;
});

對於后台而言,Post()和Get()請求,都必須在Load 事件里面處理,即使前台定義后台中的方法,像ajax()那樣 ,為 url: "WebForm1.aspx/ReceiveJson", 也不能處理,這點我也暫時沒有想明白,線上也暫無解決方案。此兩者后台的處理方式完全一樣,如下,僅僅是將接收的值中間 加了一個時間

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request["Name"] != null || Request["Content"] != null) 
                {
                    string all = Request["Name"].ToString()+"&nbsp" +DateTime.Now.ToString("yyyyMMdd HH:mm:ss")+ "<br />  "  + Request["Content"].ToString();
                    Response.Write(all);
                    Response.End();
                }
            }
        }

三個方法已羅列出來,啟動項目,看看效果如何

好吧,我承認,這個太丑了,功能還是實現了的

 

權當是個學習記錄

----市人皆大笑,舉手揶揄之


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM