<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    friends

    link

    最新評(píng)論

    ajax技術(shù)基礎(chǔ)

    ajax技術(shù)是采用javascript作為客戶端實(shí)現(xiàn)的語(yǔ)言,xml作為其通訊的機(jī)制,因此有人將ajax描述為:ajax=javascript+xml是很有道理的.a(chǎn)jax的最大優(yōu)點(diǎn)就是異步處理,相對(duì)于以往的web技術(shù)采用的請(qǐng)求全刷新機(jī)制,它更加親近于C/S結(jié)構(gòu)的軟件,給用戶的是一種很有快感的東東.其實(shí)現(xiàn)的方式是采用一個(gè)叫做XMLHttpRequest的對(duì)象進(jìn)行交互的,因?yàn)闅v史的原因,各種瀏覽器對(duì)javascript的處理方式不一致,使得生成XMLHttpRequest對(duì)象的方法也有差別,但大體上有兩種方式:微軟的ActiveX控件和XMLHttpRequest本地對(duì)象,代碼如下:
    ?1function?createXMLHttpRequest()?{
    ?2??var?xmlreq?;
    ?3??if?(window.XMLHttpRequest)?{
    ?4????//?在非Microsoft瀏覽器中創(chuàng)建XMLHttpRequest本地對(duì)象
    ?5????xmlreq?=?new?XMLHttpRequest();
    ?6??}
    ?else?if?(window.ActiveXObject)?{
    ?7????//通過(guò)MS?ActiveX創(chuàng)建XMLHttpRequest
    ?8????try?{
    ?9??????//?嘗試按新版InternetExplorer方法創(chuàng)建
    10??????xmlreq?=?new?ActiveXObject("Msxml2.XMLHTTP");
    11????}
    ?catch?(e1)?{
    12??????//?創(chuàng)建請(qǐng)求的ActiveX對(duì)象失敗
    13??????try?{
    14????????//?嘗試按老版InternetExplorer方法創(chuàng)建
    15????????xmlreq?=?new?ActiveXObject("Microsoft.XMLHTTP");
    16??????}
    ?catch?(e2)?{
    17????????//?不能通過(guò)ActiveX創(chuàng)建XMLHttpRequest
    18??????}

    19????}

    20??}

    21??return?xmlreq;
    22}

    23
    代碼中看到排除上述的兩種情況,方法createXMLHttpRequest得到的結(jié)果將是null,也就是說(shuō)無(wú)法得到XMLHttpRequest的實(shí)例,也就無(wú)法使用ajax技術(shù)。但書(shū)中一直沒(méi)有給出此時(shí)將如何處理,難道,世界上的瀏覽器就他們兩種?或者,對(duì)于那些第三類的用戶,我們要么勸勉其使用Internet Explorer或firefox等,要么對(duì)其采取拋棄的態(tài)度(這些也許是世界規(guī)范化組織該考慮的問(wèn)題)。創(chuàng)建了XMLHttpRequest實(shí)例之后就采用類似于java(awt)中的事件處理機(jī)制,如下代碼:
    ?1function?myFunction(){
    ?2????//?獲取一個(gè)XMLHttpRequest實(shí)例
    ?3????var?req?=?createXMLHttpRequest();
    ?4????//?設(shè)置用來(lái)從請(qǐng)求對(duì)象接收回調(diào)通知的句柄函數(shù)
    ?5????req.onreadystatechange?=handlerFunction(req);
    ?6????//?HTTP?POST聯(lián)接,第三個(gè)參數(shù)表示請(qǐng)求是異步的
    ?7????req.open("POST",?"handleRequest.action",?true);
    ?8????//?指示請(qǐng)求體包含form數(shù)據(jù)
    ?9????req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    10????req.send(null);
    11}
    其中req.onreadystatechange引用的類似C++中的函數(shù)的指針,即handlerFunction,其代碼如下:
    ?1function?handlerFunction(req){
    ?2????//?如果請(qǐng)求的狀態(tài)是“完成”
    ?3????if?(req.readyState?==?4){
    ?4????????//?檢查是否成功接收了服務(wù)器響應(yīng)
    ?5????????if?(req.status?==?200){
    ?6????????????//?處理事件,這里省略
    ?7????????????
    ?8????????}

    ?9????????else{
    10????????????//?有HTTP問(wèn)題發(fā)生
    11????????????alert("HTTP?error:?"+req.status);
    12????????}

    13????}

    14}
    與頁(yè)面的交互,可能是這樣的一個(gè)事實(shí),用戶點(diǎn)擊某個(gè)按鈕,激發(fā)myFunction方法的執(zhí)行,此方法將創(chuàng)造一個(gè)XMLHttpRequet實(shí)例,并將處理事件的機(jī)制委托給onreadystatechange所指定的方法(本文中即為:handlerFunction)監(jiān)聽(tīng),handlerFunction將判斷傳進(jìn)來(lái)的XMLHttpRequet實(shí)例的運(yùn)行狀態(tài),對(duì)應(yīng)其狀態(tài)實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯。
      上面沒(méi)有列出ajax的xml通信機(jī)制,這里簡(jiǎn)要的說(shuō)明一下:
      發(fā)信:通過(guò)串的連接構(gòu)造出一個(gè)滿足xml格式的字符串,如String s="<project><person><name>"+"passyt"+"<\/name><\/person><\/project>";然后通過(guò)XMLHttpRequet實(shí)例req的send傳送到服務(wù)器端,如req.send(s);
    ??????? 收信:通過(guò)req.responseXML得到所謂的Dom實(shí)例然后按照標(biāo)準(zhǔn)的文檔對(duì)象模型的方法取值顯示到頁(yè)面。
    ??? 說(shuō)明:在發(fā)信中,xml消息的構(gòu)成通過(guò)字符串的連接完成,很容易因?yàn)楣P誤而產(chǎn)生錯(cuò)誤,?ajax基礎(chǔ)教程?一書(shū)給出了另一種基于簡(jiǎn)單通信的消息格式j(luò)son,網(wǎng)上有其免費(fèi)的版本和詳細(xì)說(shuō)明,這里不再敷言。
      服務(wù)器端獲取xml的信息格式后做相關(guān)的業(yè)務(wù)處理,然后生成xml消息返回給客戶端,客戶端利用javascript中的dom支持訪問(wèn)所在的xhtml,進(jìn)行頁(yè)面的局部刷新。這里的服務(wù)器端技術(shù)可以是java,php或者是.net,總之只要是支持xml通信機(jī)制的服務(wù)器技術(shù)都可以。
      利用ajax技術(shù)可以創(chuàng)造出類似桌面軟件的web頁(yè)面,顯得與眾不同,因而顯得特別酷,又加之google的推廣以及幾個(gè)大型網(wǎng)站的宣傳,ajax就作為一種“新瓶裝老酒”的“新技術(shù)”出現(xiàn)在我們的生活中,并激起了所謂的web2.0熱潮。但顯而易見(jiàn)的是,ajax的編碼量很可能大大的超出了其他的頁(yè)面表現(xiàn)技術(shù),而作為一種弱類型語(yǔ)言無(wú)法得到對(duì)應(yīng)的自動(dòng)代碼產(chǎn)生工具,對(duì)于我們程序員而言是極其痛苦的,另外它也帶來(lái)了很大的安全隱患,因?yàn)槠浯a可見(jiàn)性,使得編寫(xiě)頁(yè)面的javascript腳本將對(duì)程序員做出更高的要求。
      但是,好的是,現(xiàn)在已經(jīng)有越來(lái)越多的ajax框架來(lái)減少javascript對(duì)瀏覽器的依賴以及提高ajax的開(kāi)發(fā)效率。?ajax基礎(chǔ)教程?一書(shū)就給出了一個(gè)框架

    posted on 2006-05-26 10:19 liaojiyong 閱讀(462) 評(píng)論(1)  編輯  收藏 所屬分類: Ajax

    評(píng)論

    # re: ajax技術(shù)基礎(chǔ) 2006-11-15 17:31 www

    good  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚洲欧洲精品成人久久奇米网| 免费观看男人免费桶女人视频| 亚洲永久精品ww47| 永久免费无码网站在线观看个| 国产精品免费视频一区| 免费人成视频在线播放| 亚洲av无码成人精品区| 四虎永久在线精品免费一区二区| www国产亚洲精品久久久日本| 爱爱帝国亚洲一区二区三区| 亚洲国产精品一区二区第一页免| 九九久久国产精品免费热6| 亚洲三区在线观看无套内射| 男女午夜24式免费视频| 亚洲精品免费在线视频| 久久久高清免费视频| 亚洲第一第二第三第四第五第六| 国产免费人人看大香伊| 国产精品高清免费网站| 亚洲AV本道一区二区三区四区| 亚洲高清视频免费| 日韩亚洲人成在线| 亚洲国产综合久久天堂| 久草视频在线免费看| 亚洲情A成黄在线观看动漫软件| 日韩视频免费在线| 中国videos性高清免费| 亚洲精品午夜在线观看| 日本免费一本天堂在线| 日本三级在线观看免费| 亚洲国产人成在线观看| 亚洲?v女人的天堂在线观看| 国产成人免费视频| 亚洲av无码片vr一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 1000部羞羞禁止免费观看视频| 亚洲欧美日韩中文二区| 亚洲日韩精品一区二区三区 | 一级片在线免费看| 亚洲AV无码1区2区久久| 日韩电影免费在线观看视频|