學習.net與ajax的詳細案例總結

来源:http://www.cnblogs.com/androidshouce/archive/2016/07/18/5679989.html
-Advertisement-
Play Games

昨天看了一天的ajax,今天又看了兩個小時,終於弄出來個門道,其實ajax不是難,不是枯燥,而是自己不會用,這是根本所在 下麵分享學習經驗,以下是我程式代碼的下載地址:http://vdisk.weibo.com/s/BQ2aD 或者這個地址 http://download.csdn.net/det ...


昨天看了一天的ajax,今天又看了兩個小時,終於弄出來個門道,其實ajax不是難,不是枯燥,而是自己不會用,這是根本所在

下麵分享學習經驗,以下是我程式代碼的下載地址:http://vdisk.weibo.com/s/BQ2aD 或者這個地址 http://download.csdn.net/detail/heikeyuit/5398845

首先瞭解什麼是ajax。

AJAX不是一種新的編程語言,而是一種用於創建更好更快以及交互性更強的 Web 應用程式的技術。 通過 AJAX,您的 JavaScript 可使用JavaScript的XMLHttpRequest對象來直接與伺服器進行通信。通過這個對象,您的 JavaScript 可在不重載頁面的情況與Web伺服器交換數據。 AJAX 在瀏覽器與 Web 伺服器之間使用非同步數據傳輸(HTTP 請求),這樣就可使網頁從伺服器請求少量的信息,而不是整個頁面。   一提到javascript,大家都會想到瀏覽器的相容性問題,其實ajax也需要考慮到這個問題。因為不同瀏覽器使用的web的javascript的類不一樣,所以產生的效果也不會一樣的。下麵不瞎說了,直接引入代碼供大家參考。 複製代碼
     {
            var xmlhttp;//非IE瀏覽器創建XmlHttpRequest對象
            if(window.XMLHttpRequest){
                xmlhttp = new XMLHttpRequest();
            }
            //IE瀏覽器創建XmlHttpRequest對象
            if (window.ActiveXObject) {
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {
                    try {
                        xmlhttp = new ActiveXObject("msxml2.XMLHTTP");
                    }
                    catch (ex) { }
                }
            }
            if (!xmlhttp) {
                alert("創建xmlhttp對象異常");
                return false;
            }
           // xmlhttp.open("POST", "GetDate.ashx?nd=" + new Date(), false); //向伺服器某個頁面發出請求
            xmlhttp.open("GET", "URL“, false); 
            
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {//如果是狀態碼則顯示成功
                        //document.getElementById("Text1").value = xmlhttp.responseText;
                        xxxxx = xmlhttp.responseText;//在此處我們可以將我們傳遞的參數返回給我們的html標簽,或者其他變數處理問題
                    } //responseText為伺服器返回的文本
                    else {
                        alert("AJAX伺服器返回錯誤");
                    }
                }
            }
            xmlhttp.send();//開始發送請求
        }
複製代碼

這隻是前臺的代碼,就這些代碼就已經足夠了,實現了局部刷新頁面的功能,剩下的後臺代碼是根據項目的不同而定,我在這裡不必引入了。

大家看到這些代碼感覺怎麼樣,對於剛學習javascript或者ajax的同學,要想記住這些代碼,真的是很難啊,還有怎麼去理解這些東西呢,我上面基本都有註釋,大家一般可以理解。但是如果每個頁面都需要局部刷新的話,這樣就會感覺每個頁面都要寫這樣的代碼是不是很麻煩啊,jQuery幫助我們完成了很多東西,這樣可以減輕我們開發項目的難度,以下是使用jQuery的代碼:

複製代碼
$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
});
複製代碼

另一種方式

$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

是不是很簡單啊,在這裡我們這是調用他寫好的函數,我們就可以實現我們的無刷新代碼了,現在感覺是不是無刷新頁面是不是很簡單了,但是我們這隻是傳遞個小數據而已,如果從資料庫中提取數據時就會很麻煩的,以下引入我的部分代碼,讓大家思考一下

以下是我實現無刷新評論並顯示的前臺和後臺代碼:

複製代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxComment.aspx.cs" Inherits="ajax學習.無刷新評論.AjaxComment1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../js/jquery-1.9.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnComment").click(function () {
                var comment = $("#txtComment").val();
                
                $.post("AjaxComment.ashx",{"msg":comment},
                function (data, status) {
                    if (status != "success") {
                        alert("發表評論失敗,請重試");
                        return;
                    }
                    if (data == "ok") {
                        var newComment = $("<li>評論日期:"+new Date().toString()+",IP:,"+"本機"+"內容:"+comment+"</li>");
                        $("#ulComment").append(newComment);
                        alert("評論發表成功");
                    }
                    else {
                        alert("評論發表有問題");
                    }
                });
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
            DeleteMethod="Delete" InsertMethod="Insert" 
            OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" 
            TypeName="ajax學習.DataSetCommentTableAdapters.T_CommentTableAdapter" 
            UpdateMethod="Update">
            <DeleteParameters>
                <asp:Parameter Name="Original_Id" Type="Int64" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="IP" Type="String" />
                <asp:Parameter Name="Msg" Type="String" />
                <asp:Parameter Name="PostDate" Type="String" />
            </InsertParameters>
            <UpdateParameters>
                <asp:Parameter Name="IP" Type="String" />
                <asp:Parameter Name="Msg" Type="String" />
                <asp:Parameter Name="PostDate" Type="String" />
                <asp:Parameter Name="Original_Id" Type="Int64" />
            </UpdateParameters>
        </asp:ObjectDataSource>
        <ul id="ulComment">
        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
            <ItemTemplate>
                <li>評論日期:<%#Eval("PostDate")%>,IP:<%#Eval("IP")%>,內容:<%#Eval("Msg")%><br/></li>
            </ItemTemplate>
        </asp:Repeater>
        </ul>
    <textarea id="txtComment" cols="20" rows="10"></textarea><br/>
    <input id="btnComment" type="button"
        value="提交" />
    </div>
    </form>
</body>
</html>
複製代碼

 

後臺代碼(AjaxComment.ashx)

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ajax學習.DataSetCommentTableAdapters;
using System.Web.Services;
namespace ajax學習.無刷新評論
{
    /// <summary>
    /// AjaxComment 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class AjaxComment : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string msg = context.Request["msg"];
            new T_CommentTableAdapter().Insert(context.Request.UserHostAddress,msg,DateTime.Now.ToString());//使用的是強類型DataSet
            context.Response.Write("ok");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
複製代碼

大家看完前臺代碼是不是有疑問了,如果傳遞很多欄位,很多屬性的數據時,該怎麼辦呢,如果每個數據都是這樣的自己split()一下的話,那麼做大項目的話肯定會累屎了,下麵jQuery有幫我們做了件好事情,就是json的使用,下麵我引入我的使用無刷新評論的json代碼

前臺代碼:

複製代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="../js/jquery-1.9.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $.post("PagedServices.ashx", { "action": "getpagecount" }, function (data, status) {
                for (var i = 1; i <=data; i++) {
                    var td = $("<td><a href=''>" + i + "</a></td>");
                    $("#trPage").append(td);
                }
                $("#trPage td").click(function (e) {
                    e.preventDefault();//不要導向鏈接地址
                    $.post("PagedServices.ashx", { "action": "getpagedata", "pagenum": $(this).text()},
                    function (data, status) {
                        var comments = $.parseJSON(data);
                        $("#ulComments li").remove();
                        for (var i = 0; i < comments.length; i++) {
                            var comment = comments[i];
                            var li = $("<li>" + comment.Id + "---" + comment.IP + "---" + comment.Msg + "---" + comment.PostDate + "</li>");
                            $("#ulComments").append(li);
                        }
                    });
                });
            });
        });
    </script>
</head>
<body>
    <ul id="ulComments"></ul>
    <table><tr id="trPage"></tr></table>
</body>
</html>
複製代碼

後臺代碼:

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using ajax學習.DataSetCommentTableAdapters;
using System.Web.Script.Serialization;
namespace ajax學習.無刷新分頁
{
    /// <summary>
    /// PagedServices 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class PagedServices : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
             // context.Response.Write("Hello World");
            string action=context.Request["action"];
            var adapter = new T_CommentTableAdapter();
            if (action == "getpagecount")
            {
                
                int count=adapter.SelectCount().Value;
                int pagecount=count/10;
                if(count%10!=0)
                {
                    pagecount++;
                }
                context.Response.Write(pagecount);
            }
            else if(action=="getpagedata")
            {
                string pagenum=context.Request["pagenum"];
                int iPageNum = Convert.ToInt32(pagenum);
                var data = adapter.GetPagedData((iPageNum - 1) * 10 + 1, iPageNum * 10);
                List<Comments> list=new List<Comments> ();
                foreach(var row in data)
                {
                    list.Add(new Comments() { Id = (int)row.Id, IP = row.IP, Msg = row.Msg, PostDate = row.PostDate, });
                }
                JavaScriptSerializer jss = new JavaScriptSerializer();
                context.Response.Write(jss.Serialize(list));
            }  
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public class Comments
    {
        public int Id { get; set; }
        public string IP{get;set;}
        public string Msg{get;set;}
        public string PostDate{get;set;}
    }
}
複製代碼

這樣我們真的是省了很多力氣啊,是不是jQuery很強大啊。。。。。。。。。。。。。

然後吧,微軟感覺我必須封裝自己的ajax,這樣使得開發者做項目變得容易一些,微軟真的是幫我們封裝好了一個,但是對於高手來說,大家都不想用,感覺這樣的代碼太呆板,一點不靈活,我再下麵引入代碼,供新手參考:(不瞭解ajax運行原理的新手一樣可以使用ajax快速開發新的項目)

複製代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UpdatPanel.aspx.cs" Inherits="ajax學習.UpdatePanel.UpdatPanel" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="普通刷新頁面顯示當前時間" 
            onclick="Button1_Click" />
    </div>
    <div>   
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><asp:Button ID="Button2" runat="server" onclick="Button2_Click" 
                    Text="Ajax無刷新顯示當前時間" />
                <br />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>
複製代碼

但是微軟後來真的是開發一個很好地工具,那就是ajax與WCF的結合,廢話少說,引入代碼,供大家思考

複製代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCF_Ajax.aspx.cs" Inherits="ajax學習.WCF之Ajax.WCF_Ajax" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在離線環境中使用.NET Core 0x00 寫在開始 很早開始就對.NET Core比較關註,一改微軟之前給人的印象,變得輕量、開源、跨平臺。最近打算試著在工作中使用。但工作是在與互聯網完全隔離的網路中進行的,因此就開始了在離線環境中部署.NET Core開發環境的嘗試。總的來說還是比較蛋疼的,幾 ...
  • 分頁和排序,應該是軟體開發中,需要必知必會的技能了,對於分頁,網上很多教程,當然,別人終究是別人的,只有自己理解,會了,並且吸收之後,再用自己的語言,傳授出來,這才是硬道理。好了,廢話說多了。現在我們進入正題: 這裡,我打算使用EF Code-First方式分頁控制項就是用PagedList.MVC, ...
  • 隨著V5框架使用者的快速增加,終於促使我開始對整個框架編寫完整的Demo。上周大概花了一星期的時間,每天寫到夜裡3點半,終完成了框架所有功能的Demo。同時,按V5框架名稱空間的順序,對每個類的使用,補充相應的文章介紹,以漏補缺。 ...
  • 昨天《怎樣操作WebAPI介面(顯示數據)》http://www.cnblogs.com/insus/p/5670401.html既有使用jQuery,也有使作HttpClient來從資料庫獲取數據,並顯示在ASP.NET MVC的視圖中。今天Insus.NET想把例子全完成,就是把其餘的添加,更新 ...
  • 最近跟著師父學習軟體,因為軟體比較複雜,所以設計到判斷某個窗體是否打開了,如果打開了,進行某種操作,如果沒有打開,又進行另一種操作。 雖然不難,但是記一下總是好的。 ...
  • 什麼是Moq Moq是一個框架,一個可以模擬對象的框架,比如在不實現介面的情況下獲得介面的對象,這個介面的所有行為都可以用代碼控制 快速開始 被模擬的可以是介面和類,類不能是密封類,只有類中的虛函數能被模擬 先寫一個介面,下麵例子大部分用這個介面,但不全用這個介面 當不用 時候 Throws Moc ...
  • 摘要: Web.config的讀取 對於Web.config的讀取大家都很屬性了。平時我們用得比較多的就是appSettings節點下配置。如: 我們對應的代碼是: 是的,很簡單、很方便、很清晰。可以總感覺缺少那麼一點“面向對象”的感覺。少還無所謂,如果幾十個上百個呢?我們是不是可以考慮分類定義,如... ...
  • 現象:panel1和panel2或更多panel,疊放在一起,panel和panel2是同一層次的。panel1和panel2切換時只能顯示一個panel,如何切換呢? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...