成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

ASP.NET下使用Ajax

ASP.NET下使用Ajax

之前在認(rèn)識Ajax初步理解中介紹了對Ajax的初步理解,本文將介紹在ASP.NET中如何方便使用Ajax,第一種當(dāng)然是使用jQuery的ajax,功能強大而且操作簡單方便,第二種是使用.NET封裝好的ScriptManager。

相關(guān)免費學(xué)習(xí)推薦:ajax(視頻)

$.ajax向普通頁面發(fā)送get請求

這是最簡單的一種方式了,先簡單了解jQuery ajax的語法,最常用的調(diào)用方式是這樣:$.ajax({settings}); 有幾個常用的setting,全部參數(shù)及其解釋可以去jQuery官方API文檔查詢

1. type:請求方式 get/post

2. url:請求的Uri

3. async:請求是否為異步

4. headers:自定義的header參數(shù)

5. data:發(fā)往服務(wù)器的參數(shù)

6. dataType:參數(shù)格式,常見的有string、json、xml等

7. contents:決定怎樣解析response的一個”字符串/正則表達(dá)式” map

8. contentType:發(fā)送到服務(wù)器的額數(shù)據(jù)的內(nèi)容編碼類型,它的默認(rèn)值是"application/x-www-form-urlencoded; charset=UTF-8""。

9. success:請求成功后調(diào)用的句柄

10.error:請求失敗后調(diào)用的句柄

沒使用過jQuery的ajax話這樣看有些云里霧里的感覺,來看一個簡單例子

首先使用Visual Studio新建一個WebApplication,把jQuery.js引入project,然后添加兩個頁面,Default.aspx作為測試用

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Web.Default" %> <!DOCTYPE html > <html> <head runat="server">     <title>Ajax</title>     <script src="jQuery.js" type="text/javascript"></script>     <style type="text/css">         html, body, form         {             width: 100%;             height: 100%;             padding: 0px;             margin: 0px;         }                  #container         {             margin: 100px;             height: 300px;             width: 500px;             background-color: #eee;             border: dached 1px #0e0;         }    </style> </head> <body>     <form id="form1" runat="server">     <p id="container">         <input type="button" value="Test Ajax" onclick="testGet()" />         <br />     </p>     <script type="text/javascript">         function setContainer(text) {             document.getElementById("container").innerHTML += ('<br/>' + text);         }          function testGet() {             $.ajax({                 type: 'get',                 url: 'NormalPage.aspx',                async: true,                 success: function (result) {                     alert(result);                 },                 error: function () {                     setContainer('ERROR!');                 }             });         }    </script>     </form> </body> </html>

NormalPage.aspx作為請求頁面,先不做任何處理。在Default.aspx頁面中的JavaScript中可以看到testGet函數(shù)就利用jQuery的ajax向Normal.aspx發(fā)送了了一個get請求,沒寫的參數(shù)使用jQuery默認(rèn)參數(shù),這個調(diào)用沒使用任何參數(shù),簡單向Normal.aspx頁面發(fā)送請求,請求成功則alert全部response(即success方法參數(shù):result,jQuery會把responseText傳入success方法第一個參數(shù)),請求失敗則向p中添加一行錯誤提示文本。如果一切正常,可以看到頁面彈出對話框,對話框內(nèi)內(nèi)容即是Normal.aspx頁面內(nèi)容

ASP.NET下使用Ajax

一個簡單的get請求完成了,這樣的結(jié)果一般沒有多大用處,也不是ajax意圖所在,使用Ajax主要是想使用JavaScript可以異步向服務(wù)器發(fā)送特定請求,獲取服務(wù)器相關(guān)數(shù)據(jù),比如向服務(wù)器詢問天氣,然后獲得天氣數(shù)據(jù),更新頁面,而不是獲取整個頁面,換句話說,使用Ajax本身就是為了擺脫更新整個頁面來更新頁面數(shù)據(jù)這種模式,僅僅需要服務(wù)器給我們數(shù)據(jù)即可,這就需要調(diào)用服務(wù)器端的特定方法。

$.ajax GET請求調(diào)用服務(wù)器特定方法

我們這時候需要修改NormalPage.aspx,為其添加幾個方法供Default.aspx測試調(diào)用

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Web {    public partial class NormalPage : System.Web.UI.Page     {        protected void Page_Load(object sender, EventArgs e)         {            string action = Request.QueryString["action"];             Response.Clear(); //清除所有之前生成的Response內(nèi)容             if (!string.IsNullOrEmpty(action))             {                switch (action)                 {                    case "getTime":                         Response.Write(GetTime());                        break;                    case "getDate":                         Response.Write(GetDate());                        break;                 }             }             Response.End(); //停止Response后續(xù)寫入動作,保證Response內(nèi)只有我們寫入內(nèi)容        }        private string GetDate()         {            return DateTime.Now.ToShortDateString();         }        private string GetTime()          {            return DateTime.Now.ToShortTimeString();         }     } }

然后為Default.aspx添加一個新的方法,并修改button的onclick方法為新寫的函數(shù)

function testGet2() {             $.ajax({                 type: 'get',                 url: 'NormalPage.aspx',                 async: true,                 data:{action:'getTime'},                 success: function (result) {                     setContainer(result);                 },                 error: function () {                     setContainer('ERROR!');                 }             });         }

testGet2函數(shù)是在testGet函數(shù)的基礎(chǔ)上做了些許修改,首先對success方法做了更改,把得到的response寫到頁面;然后對請求添加了data參數(shù),請求向服務(wù)器發(fā)送了一個action:getTime的鍵值對,在get請求中jQuery會把此參數(shù)轉(zhuǎn)為url的參數(shù),上面寫法和這種寫法效果一樣

function testGet3() {             $.ajax({                 type: 'get',                 url: 'NormalPage.aspx?action=getTime',                 async: true,                 success: function (result) {                     setContainer(result);                 },                 error: function () {                     setContainer('ERROR!');                 }             });         }

看一下執(zhí)行效果,這是Chrome的監(jiān)視結(jié)果

ASP.NET下使用Ajax

如果調(diào)試我們發(fā)現(xiàn)這個請求調(diào)用的服務(wù)器頁面NormalPage.aspx的GETime方法,并且response中只包含對有用的數(shù)據(jù),如果把請求中參數(shù)的值改為getDate,那么就會調(diào)用對應(yīng)GetDate方法。

$.ajax POST與json

這樣向一個頁面發(fā)送請求然后在Load事件處理程序中根據(jù)參數(shù)調(diào)用不同方法,清除Response,寫入Response,終止Response,而且傳入的參數(shù)局限性太大,好業(yè)余的趕腳,看看專業(yè)些解決方法。為project添加一個General Handler類型文件,關(guān)于HttpHandler相關(guān)內(nèi)容本文不做詳細(xì)解釋,只需知道它可以非常輕量級的處理HTTP請求,不用走繁瑣的頁面生命周期處理各種非必需數(shù)據(jù)。

Handler.ashx.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;using Newtonsoft.Json;namespace Web {    /// <summary>     /// Summary description for Handler    /// </summary>     public class Handler : IHttpHandler     {        public void ProcessRequest(HttpContext context)         {             Student stu = new Student();            int Id = Convert.ToInt32(context.Request.Form["ID"]);            if (Id == 1)             {                 stu.Name = "Byron";             }            else             {                 stu.Name = "Frank";             }           string stuJsonString= JsonConvert.SerializeObject(stu);            context.Response.Write(stuJsonString);         }        public bool IsReusable         {            get             {                return false;             }         }     } }

關(guān)于這個類語法本文不做詳細(xì)說明,每次發(fā)起HTTP請求ProcessRequest方法都會被調(diào)用到,Post類型請求參數(shù)和一再Request對象的Form中取得,每次根據(jù)參數(shù)ID值返回對應(yīng)json對象字符串,為了展示json格式數(shù)據(jù)交互,需要為項目引入json.net這一開源類庫處理對象序列化反序列化問題,然后創(chuàng)建一個Student類文件

Student.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Web {    public class Student     {        public int ID { get; set; }        public string Name { get; set; }     } }

看看頁面如何處理

function testPost() {             $.ajax({                 type: 'post',                 url: 'Handler.ashx',                 async: true,                 data: { ID: '1' },                 success: function (result) {                     setContainer(result);                    var stu =eval ('('+result+')');                     setContainer(stu.ID);                     setContainer(stu.Name);                 },                 error: function () {                     setContainer('ERROR!');                 }             });         }

結(jié)果是這個樣子的

ASP.NET下使用Ajax

上面代碼向Handler.ashx發(fā)送一Post請求,比且?guī)в袇?shù){ID:’1’},可以看到結(jié)果,如果用調(diào)試工具可以發(fā)現(xiàn),得到的result是一個json格式的字符串,也就是往Response寫的對象序列化后的結(jié)果。這樣就實現(xiàn)了比較專業(yè)些的方式調(diào)用Ajax,但是有一個問題依舊存在,HttpHandler會自動調(diào)用ProcessRequest方法,但是也只能調(diào)用該方法,如果想調(diào)用不同方法只能像普通頁面那樣傳遞一個參數(shù)表明調(diào)用哪個方法,或者寫不同的Handler文件。

WebService與ScriptManager

微軟向來很貼心,看看微軟怎么處理上面的困惑,那就是利用WebService,WebService配合SCriptManager有客戶端調(diào)用的能力,在項目中添加一個Webservice文件

WebService.asmx

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services;  namespace Web {    /// <summary>     /// Summary description for WebService     /// </summary>     [WebService(Namespace = "http://tempuri.org/")]     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]     [System.ComponentModel.ToolboxItem(false)]    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.     [System.Web.Script.Services.ScriptService]     public class WebService : System.Web.Services.WebService     {          [WebMethod]         public Student GetStudent(int  ID)         {            if (ID == 1)             {                return new Student() { ID = 1, Name = "Byron" };             }            else             {                return new Student() { ID = 2, Name = "Frank" };             }         }
  [WebMethod]            public string GetDateTime(bool isLong)               {                     if (isLong)                      {                           return DateTime.Now.ToLongDateString();                        }                             else                                {                                       return DateTime.Now.ToShortDateString();                            }                                          }     }           }

代碼中加黃的code默認(rèn)是被注釋掉的,要想讓客戶端調(diào)用需要把注釋去掉,Service中定義了兩個方法,寫個測試方法讓客戶端調(diào)用第一個方法根據(jù)參數(shù)返回對應(yīng)對象,首先需要在頁面from內(nèi)加上ScriptManager,引用剛才寫的WebService文件

Default.aspx

<form id="form1" runat="server">     <asp:ScriptManager ID="clientService" runat="server">         <Services>             <asp:ServiceReference Path="~/WebService.asmx" />         </Services>     </asp:ScriptManager>     <p id="container">         <input type="button" value="Test Ajax" onclick="testPost2()" />         <br />     </p>...

然后添加JavaScript測試代碼

function testPost2() {             Web.WebService.GetStudent(1, function (result) {                 setContainer(result.ID);                 setContainer(result.Name);             }, function () {                 setContainer('ERROR!');             });         }

測試代碼中需要顯示書寫WebService定義方法完整路徑,WebService命名空間.WebService類名.方法名,而出入的參數(shù)列表前幾個是調(diào)用方法的參數(shù)列表,因為GetStudent只有一個參數(shù),所以只寫一個,如果有兩個參數(shù)就順序?qū)憙蓚€,另外兩個參數(shù)可以很明顯看出來是響應(yīng)成功/失敗處理程序。看看執(zhí)行結(jié)果:

ASP.NET下使用Ajax

觀察仔細(xì)會發(fā)現(xiàn)使用ScriptManager和WebService組合有福利,在WebService中傳回Student對象的時候并沒有序列化成字符串,而是直接返回,看上面圖發(fā)現(xiàn)對象已經(jīng)自動轉(zhuǎn)換為一json對象,result結(jié)果可以直接操作,果真非常貼心。而上一個例子中我們得到的response是一個json字符串,在客戶端需要用eval使其轉(zhuǎn)換為json對象。

ScriptManager+WebSefvice調(diào)用ajax帶來了很大的便利性,但同時犧牲了很多靈活性,我們沒法像jQuery那樣指定很多設(shè)置有沒有兩全其美的辦法呢

$.ajax+WebService

jQuery調(diào)用Handler幾乎完美了,但是不能處理多個方法,上面例子我們可以發(fā)現(xiàn)WebService可以實現(xiàn)這一功能,那么能不能jQUery調(diào)用WebService的不同方法呢?答案是肯定的,試一試用jQuery調(diào)用剛才WebService定義的第二個方法。寫一個測試函數(shù)

function testPost3() {             $.ajax({                 type: 'post',                 url: 'WebService.asmx/GetDateTime',                 async: true,                 data: { isLong: true },                 success: function (result) {                     setContainer($(result).find('string').text());                 },                 error: function () {                     setContainer('ERROR!');                 }             });         }

調(diào)用方式?jīng)]有多大變化,簡單依舊,只要把URL改為WebService路徑+需要調(diào)用的方法名,然后把參數(shù)放到data里就可以了。我們看看結(jié)果:

ASP.NET下使用Ajax

通過上圖可以看到,jQuery調(diào)用WebService默認(rèn)會返回一個XML文檔,而需要的數(shù)據(jù)在 <string>節(jié)點中,只需要使用jQuery解析xml的語法就可以輕松得到數(shù)據(jù)。如果希望返回一個json對象怎么辦?那就得和調(diào)用Handler一樣使用json.net序列化,然后前端使用eval轉(zhuǎn)換了,也不會過于復(fù)雜。我在項目中最常使用這個模式,這樣既保持了jQuery的靈活性又可以在一個Service中書寫多個方法供調(diào)用,還不用走復(fù)雜的頁面生命周期

json.net和本文示例源代碼

json.net是一個開源的.net平臺處理json的庫,可以序列化Dictionay嵌套等復(fù)雜對象,關(guān)于其簡單使用有時間會總結(jié)一下,可以自codeplex上得到其源碼和官方說明。本文的源代碼可以點擊這里獲得。

其他相關(guān)免費學(xué)習(xí)推薦:js視頻教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品国产免费观看三人同眠| 久久香港三级台湾三级播放| 激情综合五月丁香五月激情| 精品亚洲成A人在线观看青青| 久久天天躁狠狠躁夜夜AVAPP| 免费人成无码大片在线观看| 欧美性大片XXXXX久久久| 日韩熟妇无码字幕视频毛片| 玩弄三个高大的熟妇赶尸艳谈| 亚洲AV日韩AV永久无码免下载| 亚洲人成网站精品片在线观看| 又色又爽又黄的裸体美女图片| 99精品国产福久久久久久| 成年女人毛片免费观看中文| 国产极品美女高潮无套| 精品免费国产一区二区| 蜜臀久久AV无码牛牛影视| 人妻人人澡人人添人人爽| 婷婷色香合缴缴情AV第三区 | 把腿张开我要CAO死你在线观看| 丁香花在线电影小说观看| 国产又爽又黄无码无遮挡在线观看| 久久久国产精品VA麻豆| 人妻AV无码一区二区三区| 无码人妻精品一区二区三| 亚洲一区精品人人爽人人躁| JAPANESE国产中文在线观| 国产极品美女高潮无套在线观看| 久久AV无码AV高潮AV| 亲孑伦一区二区三区| 小洞饿了要吃大肠动作视频| 中国VIDEOSEX高潮对白H| 房中之术御女之功秘术| 精品亚洲成A人无码成A在线观看| 人妻少妇粗大持久满足| 亚洲AV成人无码久久精品老人| 中文字幕人成无码人妻综合社区| 公和熄小婷乱中文字幕| 久久精品国产99精品最新| 日本亚洲色欲网站WWW| 亚洲国产日韩欧美高清片| XX娇小嫩XX中国XX| 好男人视频在线观看| 欧洲精品免费一区二区三区| 亚洲AV无码一区二区三区网站| 97国产精华最好的产品亚洲| 国产精品美女久久久久久2018| 久久久久亚洲精品成人网| 日产2021免费一二三四区| 亚洲精品无码久久毛片| 草木影视在线视频免费观看| 精品亚洲成在人线AV无码| 日文中文字幕乱码一二三区别| 艳妇乳肉豪妇荡乳ⅩXX| 国产成人精品人人| 蜜桃亚洲AV无码一区二区三区| 无码中文人妻在线一区二区三区| 51VV社区视频在线视频观看| 国产精品嫩草影院一二三区入口| 男生把QQ放进女生的QQ里韩剧 | 欲求不满邻居的爆乳在线播放| 丁香色欲久久久久久综合网| 久久亚洲AV成人无码国产最大| 无码AV蜜臀AⅤ色欲在线观看| 2019在线人妻中文字幕| 好男人好资源神马在线观看| 日韩欧美精品有码在线| 真人新婚之夜破苞第一次视频 | 亚洲AV无码国产一区二区三区| 阿娇被躁120分钟视频| 久久66热人妻偷产精品9| 天天想你在线视频免费观看高清版| 中文日本字幕MV在现线观看| 国产午夜免费啪视频观看视频| 人妻少妇久久中文字幕| 一区二区操逼视频| 国产伦久视频免费观看视频| 人妻无码久久精品人妻| 一边做饭一边躁狂怎么办呢69| 国产乱XXXX搡XXXXX搡| 人妻无码一区二区在线影院| 在线观看ww亚洲精品| 国内精品久久久久久久97牛牛| 色一情一乱一伦一视频免费看 | 99久久久无码国产麻豆| 久久精品国产99久久丝袜蜜桃 | 精品人妻一区二区三区四区 | 2021最新久久久视精品爱| 经典WC偷窥美女如厕MP4| 婷婷色丁香五月激情综合| 被老汉耸动呻吟双性美人| 免费无码久久成人网站| 亚洲午夜久久久影院伊人| 国产日产欧产精品品不卡| 少妇太爽了在线观看免费视频| IPHONE欧美高级| 免费无码成人AV在线播放| 艳妇乳肉豪妇荡乳AV无码福利| 好吊色欧美一区二区三区视频| 无码AⅤ最新AV无码专区| 成人观看免费毛片爽| 欧美一区二区三区视频在线观看| 在线观看特色大片免费网站| 久久国产精品娇妻素人| 亚洲AV日韩AV无码A一区| 国产精品成人影院在线观看| 色一情一乱一乱一区91Av奶水| 边喂奶边中出的人妻| 欧美丰满熟妇XX猛交| 18禁黄网站禁片免费观看国产| 久久亚洲精品国产精品| 亚洲亚洲人成无码网WWW| 精品国产亚洲第一区二区三区| 性饥渴少妇做私密SPA| 国产精品原创巨作AV女教师 | 人妻丰满熟妇岳av无码区HD| ASS鲜嫩鲜嫩PICS日本| 在线观看内射亲妹妹无套内射| 寂寞骚妇被后入式爆草抓爆| 午在线亚洲男人午在线| 国产精品无码翘臀在线看| 玩小雪跪趴把腿分到最大影视频 | 图片区小说区另类春色| 国产69久久精品成人看| 天堂√在线中文最新版8| 国产A级作爱片无码| 四虎亚洲精品成人A在线观看| 夫妇交换聚会群4P疯狂大战| 舌头伸入麻麻两腿之间| 国产成人A∨麻豆精品| 无码AV片在线观看免费| 国产精品视频一区二区噜噜| 性欧美VIDEOFREE高清潮| 国产中文成人精品久久久| 亚洲AV永久无码精品网址| 精品无码国产一区二区三区51安 | 国产美女mv一区二区竹| 亚洲AV蜜乳永久www| 精品国产一区AV天美传媒| 亚洲色成人网一二三区| 麻豆av一区二区三区久久| 99久久国产综合精麻豆| 人人爽人人澡人人人妻百度| 夫上司人妻秘书OL中文有码| 我和公发生了性关系视频| 国内粗鲁VIDEO老熟妇| 亚洲人成网77777亚洲色| 两个黑人大战娇妻的小说| 97人妻碰碰碰久久久久| 日本最新免费二区| 国产精品美女久久久久网站浪潮| 亚洲AV无码片在线播放| 九月婷婷亚洲综合成人| 中文字幕AV无码专区第一页| 欧美综合在线激情专区| 炖肉计(是今)海棠| 性饥渴姓交HDSEX| 久久精品国产一区二区三区| 40岁大乳的熟妇在线观看| 日本熟妇xxxx| 国产日产久久高清欧美一区| 一本一道人人妻人人妻ΑV| 内射干少妇亚洲69XXX| 成本人H无码播放私人影院| 香港经典A毛片免费观看变态| 久久不见久久见免费影院3 | 欧美激情一区二区三区在线 | 50岁熟妇的呻吟声对白| 日本一丰满一BBW| 国产无人区码SUV| 一对浑圆的胸乳被揉捏动态图| 欧美军警GAY巨大粗长| 国产SM主人调教女M视频| 亚洲国产精品日韩AV专区| 免费女同毛片在线播放| 非洲人与性动交CCOO| 亚洲成国产人片在线观看| 妺妺窝人体色WWW精品777| 丰满少妇被猛烈进入无码| 亚洲国产成人久久综合电影| 女人与公豬交交30分钟视频| 够了够了到高C了| 亚洲综合无码AV一区二区三区| 人妻丰满熟妇AⅤ无码区| 国产偷V国产偷V亚洲高清| 中文无码制服丝袜人妻AV| 视频视频APP在线看| 精品人妻无码专区在中文字幕| VIDEOS日本多毛HD护士| 亚洲 精品 制服 校园 无码 | 久久EE热这里只有精品| 暗交小拗女一区二区三区视频| 亚洲 欧美 国产 日韩 精品| 男人J放进女人J无遮挡免费看 | 丁香花视频资源在线观看| 亚洲欧美VR色区| 日本XXX色视频| 精品一线二线三线区别大吗| 成人无码一区二区三区| 亚洲一区二区无码视频|