真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

實現(xiàn)Ajax的示例分析

小編給大家分享一下實現(xiàn)Ajax的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、龍港網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

Ajax:  Asynchronous JavaScript and Xml , 異步j(luò)s腳本和xml , 常用來實現(xiàn)頁面局部的異步刷新, 對提高用戶體驗有很大幫助. Xml在多語言時較有優(yōu)勢, 但Ajax技術(shù)實際上較多采用Json對象而不是Xml來處理數(shù)據(jù).

(一) Ajax歷史....了解性知識

Ajax歸屬于Web前端開發(fā)技術(shù), 與javascript有著異常緊密的聯(lián)系. Ajax就是一種實現(xiàn)異步通信無刷新的技術(shù), 而這種技術(shù)可以有很多種實現(xiàn)方式. 瀏覽器的鼻祖網(wǎng)景(NetScape)公司最早發(fā)明了LiveScript腳本語言, 用來豐富網(wǎng)頁元素的表現(xiàn)形式, 使網(wǎng)頁能夠呈現(xiàn)出動態(tài)效果. 隨后的歷次改版升級后就誕生了JavaScript語言, 與此同期微軟(Microsoft)公司也看到互聯(lián)網(wǎng)的前景, 開始涉足并發(fā)力于互聯(lián)網(wǎng)行業(yè), 推出了JScript語言, 可惜沒有JavaScript成熟, 發(fā)展遲滯. 最終微軟公司對互聯(lián)網(wǎng)的決心促成了MS對NS的漫長曲折的收購歷程.

這里提一下, 動態(tài)HTML語言(Dynamic Hyper Text Markup Language)就是將javascript放在Dom樹的元素節(jié)點中, 為元素提供動態(tài)展示行為.

(二)Web前端開發(fā)的兩個思路:a. JavaScript + XHR + CSS b. Flash ---> 瀏覽器插件 ---> Flex(Adobe); Silverlight4.0(MS)

1. Ajax: 以MS的XHR(XMLHttpRequest)為核心 ---> Ajax

2. flash: MicroMedia ---> 被Adobe收購 ---> flex (涵蓋了ActionScript和Rich Internet Application等技術(shù)的組合)

3. SilverLight: 微軟為了抗衡flex而推出的SilverLight

備注:

為了能夠在后臺異步與服務(wù)器進行通訊, 微軟在IE中添加了兩個組件: 負責(zé)與服務(wù)器通訊的組件(XMLHTTPRequest)和XML的處理組件. 采用XML作為數(shù)據(jù)交換的載體, 在多語言處理時具有優(yōu)勢, 但xml的處理成本較高, 實際上Ajax中通常采用Json對象在客戶端瀏覽器和服務(wù)器之間傳遞數(shù)據(jù).

網(wǎng)頁的生成過程其實是由服務(wù)器上的一組程序來完成的, 這樣為了在客戶端的JS語言和服務(wù)器端的C#語言傳遞數(shù)據(jù), .Net提供了Json序列化和反序列化器, 來提供服務(wù)器端C#對象和Json對象之間的轉(zhuǎn)換. 而在瀏覽器端可以使用eval()函數(shù)獲取服務(wù)器傳遞過來的Json串轉(zhuǎn)化為Json對象.

(三)Ajax解決什么問題

我們都知道, 在客戶端向服務(wù)器請求一個頁面時, 服務(wù)器首先動態(tài)的計算并生成出頁面, 然后再發(fā)給客戶端. 客戶端瀏覽器順序編譯并呈現(xiàn)頁面.

在沒有Ajax時: 假如說頁面有個用戶驗證控件, 那么在客戶端瀏覽器呈現(xiàn)用戶驗證控件時, 會等待服務(wù)器的驗證結(jié)果, 收到結(jié)果后才能繼續(xù)呈現(xiàn)頁面元素. 而這個驗證過程通常要進行讀取數(shù)據(jù)庫等操作, 這就是所謂的同步方式. 而這種方式, 會造成網(wǎng)頁呈現(xiàn)的假死狀態(tài).

在使用Ajax后: 同樣是驗證控件, 客戶端提交了驗證請求后, 便繼續(xù)順序呈現(xiàn)其他元素. 當(dāng)取得驗證結(jié)果后, 由javascript在客戶端修改內(nèi)存中的DOM對象后并呈獻給用戶(注意: 這里修改的只是內(nèi)存中的DOM對象, 而客戶端接收的頁面文件并沒有修改). 這樣, 使用異步的方式, 就不會出現(xiàn)假死狀態(tài), 同時客戶端也節(jié)省了等待服務(wù)器返回結(jié)果時的時間開銷.

實現(xiàn)Ajax的示例分析

(四)Ajax的實現(xiàn)(3中Ajax的實現(xiàn), 需要說明的是: Ajax能夠?qū)崿F(xiàn)的效果, 通過WebService都能實現(xiàn).)

1. Js中的Ajax異步調(diào)用: a.new b.onreadystatechange(處理responseText)  c.open(get方式和post方式) d.send      (同步調(diào)用: a.new b.open(get方式和post方式) c.send d.responseText)

//ajax.html




Ajax of Javascript & jQuery


Javascript-Ajax: Click me





function getData() { //創(chuàng)建XMLHttpRequest通信對象 var xhr; if (window.ActiveXObject) { //標準情況下, 只能有兩個ActiveXObject對象處理通信過程 xhr =new ActiveXObject("Microsoft.XMLHTTP"); } elseif (window.XMLHttpRequest) { xhr =new XMLHttpRequest(); } else { thrownew Error("Ajax is not supported by this browser"); } var elem = document.getElementById("show"); //用來顯示處理結(jié)果 //使用onreadystatechange事件處理結(jié)果 xhr.onreadystatechange =function() { if (xhr.readyState ==4) { // readyState表示服務(wù)器響應(yīng)狀態(tài). 4: 響應(yīng)接收完畢 if (xhr.status ==200) { // status 表示 http 請求的狀態(tài) var json = xhr.responseText; //從請求中回應(yīng)中獲得json串 var obj = eval("("+ json +")"); // 借助 eval 將 json 串轉(zhuǎn)化為對象, 在客戶端瀏覽器必須解析為js對象 elem.innerHTML =""+ obj.name +""; } } } //通過open設(shè)置請求方式 xhr.open("get", "json.ashx", true); //默認為ture, false表示同步方式 //發(fā)送請求 xhr.send(null); /* 同步方式, false表示不適用異步方式 xhr.open("get", "json.ashx", false); xhr.send(null); //處理結(jié)果 alert(xhr.responseText); */ } $(function() { //ready函數(shù), 腳本加載完即執(zhí)行, 也可以用$(...$("#btn").click...)();加載 $("#btn").click(function showData() { //按鈕上添加onclick事件, 事件處理方法為showData() $("#show").load("jquery.ashx"); //從jquery.ashx中獲取數(shù)據(jù)元素(innerHTML的內(nèi)容), 并顯示在div中 }); });

然后還需要在項目中, 添加類似于json.ashx一般處理程序, 用于提供相關(guān)數(shù)據(jù)(如: 表格日歷的繪制, 去數(shù)據(jù)庫驗證等操作)

//json.ashx

<%@ WebHandler Language="C#" Class="Json"%>

using System;
using System.Web;

publicclass Json : IHttpHandler {

publicvoid ProcessRequest (HttpContext context) {
context.Response.ContentType ="text/plain";

//對于靜態(tài)內(nèi)容, 需要禁用瀏覽器的緩存, 否則老是舊結(jié)果
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

string name ="Mike";

string jsonFormat ="{{ \"name\": \"{0}\" }}"; //{{、}}是為了避免和Json中的{沖突而采用的特殊轉(zhuǎn)義符

string json =string.Format(jsonFormat, name);

context.Response.Output.Write(json);
}

publicbool IsReusable {
get {
returnfalse;
}
}
}

//jquery.ashx

<%@ WebHandler Language="C#" Class="jquery"%>

using System;
using System.Web;

publicclass jquery : IHttpHandler {

publicvoid ProcessRequest (HttpContext context) {
context.Response.ContentType ="text/plain";
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

DateTime now = DateTime.Now;
string jqueryFormat ="{0}";
string jquery =string.Format(jqueryFormat, now);

context.Response.Write(jquery);
}

publicbool IsReusable {
get {
returnfalse;
}
}
}

2.1 使用AjaxPro2:

a.添加AjaxPro2類庫(AjaxPro2.dll) b.webconfig中添加配置文件 c.在App_Code中創(chuàng)建類庫文件(cs文件)提供Ajax服務(wù), 并在頁面對應(yīng)的后臺cs文件中注冊Ajax(Page_Load事件中) d.在App_Code中的類庫文件(cs文件中)編寫帶有Ajax標簽的處理方法 e.在前臺的aspx文件中使用腳本處理結(jié)果(修改內(nèi)存中的DOM對象)并顯示在頁面上

//b.webconfig中添加配置文件









 //c.在App_Code中創(chuàng)建類庫文件(cs文件)提供Ajax服務(wù), 并在頁面對應(yīng)的后臺cs文件中注冊Ajax(Page_Load事件中)

//default.aspx.cs文件

protectedvoid Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(CalendarServices)); //AjaxPro會根據(jù)注冊的類型自動生成腳本
}

 //d.在App_Code中的類庫文件(cs文件中)編寫帶有Ajax標簽的處理方法


//CalendarServices.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

publicclass CalendarServices
{
[AjaxPro.AjaxMethod]
publicbool save(string date, string tile, string detail)
{
System.Threading.Thread.Sleep(5000); //用來測試異步
returntrue; //這里為簡單, 直接返回true
}
}

//e.在前臺的aspx文件中使用腳本處理結(jié)果(修改內(nèi)存中的DOM對象)并顯示在頁面上

//default.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>









日期: 標題: 詳情:
$(function() { $("#btn").click(function() { var date = $("#date").val(); var title = $("#title").val(); var detail = $("#detail").val(); //由AjaxPro生成的js代理, 很像C#中類庫的使用, 其中function(result)是異步的結(jié)果處理方法 CalendarServices.save(date, title, detail, function(result) { if (result.error !=null) { //服務(wù)器上出現(xiàn)異常 alert(result.error.Message); } if (result.value) { //服務(wù)器cs文件中的方法返回永真 alert("服務(wù)器返回true! "); } }); }); });

2.2. 以前使用的老板Ajax(維護老項目可能用到, 其實與第2種很類似): a.引用Ajax框架類庫 b. webconfig中添加配置 c.在App_Code中添加Ajax服務(wù)類, 并在CS文件中注冊Ajax(Page_Load事件中) d.在App_Code中的CS文件中帶Ajax標簽的處理方法 e.按鈕綁定觸發(fā)JS的方法 f.JS處理方法

//a. 引用Ajax框架的類庫Ajax.dll

//b. webconfig添加配置



 //c. 在CS文件中注冊Ajax(Page_Load事件中)

Ajax.Utility.RegisterTypeForAjax(typeof(SysBase_UserEdit)); //SysBase_UserEdit是頁面文件名稱

//d. 在App_Code中的CS文件中帶Ajax標簽的處理方法

[Ajax.AjaxMethod]
public DataSet getRoleData(int Roleid)
{
DataSet ds =new DataSet();
ds = r.SelectRoleData(string.Format(" and id={0}", Roleid));

return ds;
}

//e. 按鈕綁定觸發(fā)JS的方法

this.DDLRole.Attributes.Add("onpropertychange", "onCommandInputPropertyChange();"); //在Page_Load事件中基于Attribute為按鈕綁定方法, 在aspx文件中手動添加也可以

//f. JS處理方法

3. VS2008集成的Ajax:

a.VS2005的話需要安裝插件(Microsoft ASP.NET 2.0 AJAX Extensions) b.緊挨著Form元素放置ScriptManager控件 c.在要刷新的table元素首位處, 使用UpdatePanel和ContentTemplate包起來 d.在table元素結(jié)尾處的ContenTemplate和UpdatePanel之間放置trigger元素, 注冊Ajax觸發(fā)按鈕 e.引用類庫Ajax2 f.VS2005需要配置webConfig

//d. 在table元素結(jié)尾處的ContenTemplate和UpdatePanel之間放置trigger元素, 注冊Ajax觸發(fā)按鈕(btn_Search, btn_Delete均為按鈕)





//f. VS2005需要配置webConfig








============================分割線============================

關(guān)于第一種: Js中的Ajax異步調(diào)用, 補充點東東, 不單獨開篇了

關(guān)于參數(shù)傳遞 :

1.
get方式傳參, 參數(shù)保存在URL中, 例如:

xhr.open("get", "json.ashx?name=xxx", true);
xhr.send(null);

在服務(wù)端(json.ashx后臺代碼), 可以用HttpContext類型的參數(shù)對象context來獲取, 獲取方式context.Request.QueryString["name"]....等等(自己在調(diào)試狀態(tài)下看)

2.
post方式傳參, 參數(shù)保存在請求包的包體(Body)中, 例如:

xhr.open("post","json.ashx",true);
xhr.send("xxx");

或者
xhr.send("name=xxx");

相應(yīng)的服務(wù)器端(json.ashx后臺代碼), 針對2中"非鍵值對"、"鍵值對"有兩種獲取方法:

非鍵值對: 用context.Request.InputStream獲取, 如:

System.IO.Stream stream = context.Request.InputStream;
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
string strParam = sr.ReadToEnd();

其中涉及編碼轉(zhuǎn)換的, 自己在調(diào)整下.

鍵值對: 用context.Request.Form["name"]...獲取

以上是“實現(xiàn)Ajax的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前文章:實現(xiàn)Ajax的示例分析
網(wǎng)頁鏈接:http://weahome.cn/article/iedsdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部