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

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

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

    隨筆 - 44  文章 - 78  trackbacks - 0
    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

     Happy 牛 Year
    一、一周至少寫一篇博文;
    二、每天至少學(xué)習(xí)半個小時。
    三、奔向小牛!

    常用鏈接

    留言簿(6)

    我參與的團(tuán)隊

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    感覺這篇文章介紹ajax很不錯,特轉(zhuǎn)來共享,為了表示對作者的尊重,所以連下面的一并拷了過來,希望對大家有用:
    ajax
    AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。


    主要包含了以下幾種技術(shù)


    Ajax(Asynchronous JavaScript + XML)的定義

    基于web標(biāo)準(zhǔn)(standards-based presentation)XHTML+CSS的表示;

    使用 DOM(Document Object Model)進(jìn)行動態(tài)顯示及交互;

    使用 XML 和 XSLT 進(jìn)行數(shù)據(jù)交換及相關(guān)操作;

    使用 XMLHttpRequest 進(jìn)行異步數(shù)據(jù)查詢、檢索;

    使用 JavaScript 將所有的東西綁定在一起。英文參見Ajax的提出者Jesse James Garrett的原文。

    類似于DHTML或LAMP,AJAX不是指一種單一的技術(shù),而是有機(jī)地利用了一系列相關(guān)的技術(shù)。事實上,一些基于AJAX的“派生/合成”式(derivative/composite)的技術(shù)正在出現(xiàn),如“AFLAX”。

    AJAX的應(yīng)用使用支持以上技術(shù)的web瀏覽器作為運行平臺。這些瀏覽器目前包括:MozillaFirefoxInternet ExplorerOperaKonquerorSafari。但是Opera不支持XSL格式對象,也不支持XSLT。


    與傳統(tǒng)的web應(yīng)用比較


    傳統(tǒng)的web應(yīng)用允許用戶填寫表單(form),當(dāng)提交表單時就向web服務(wù)器發(fā)送一個請求。服務(wù)器接收并處理傳來的表單,然後返回一個新的網(wǎng)頁。這個做法浪費了許多帶寬,因為在前後兩個頁面中的大部分HTML代碼往往是相同的。由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請求,應(yīng)用的響應(yīng)時間就依賴于服務(wù)器的響應(yīng)時間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。

    與此不同,AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的web service接口,并在客戶端采用JavaScript處理來自服務(wù)器的響應(yīng)。因為在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快的應(yīng)用。同時很多的處理工作可以在發(fā)出請求的客戶端機(jī)器上完成,所以Web服務(wù)器的處理時間也減少了。

    Ajax應(yīng)用程序的優(yōu)勢在于:

    1. 通過異步模式,提升了用戶體驗

    2. 優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用

    3. Ajax引擎在客戶端運行,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作,從而減少了大用戶量下的服務(wù)器負(fù)載。


    Ajax的工作原理


      Ajax的核心是JavaScript對象XmlHttpRequest。該對象在Internet Explorer 5中首次引入,它是一種支持異步請求的技術(shù)。簡而言之,XmlHttpRequest使您可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng),而不阻塞用戶。

      在創(chuàng)建Web站點時,在客戶端執(zhí)行屏幕更新為用戶提供了很大的靈活性。下面是使用Ajax可以完成的功能:

        動態(tài)更新購物車的物品總數(shù),無需用戶單擊Update并等待服務(wù)器重新發(fā)送整個頁面。

        提升站點的性能,這是通過減少從服務(wù)器下載的數(shù)據(jù)量而實現(xiàn)的。例如,在某購物車頁面,當(dāng)更新籃子中的一項物品的數(shù)量時,會重新載入整個頁面,這必須下載整個頁面的數(shù)據(jù)。如果使用Ajax計算新的總量,服務(wù)器只會返回新的總量值,因此所需的帶寬僅為原來的百分之一。 消除了每次用戶輸入時的頁面刷新。例如,在Ajax中,如果用戶在分頁列表上單擊Next,則服務(wù)器數(shù)據(jù)只刷新列表而不是整個頁面。
    直接編輯表格數(shù)據(jù),而不是要求用戶導(dǎo)航到新的頁面來編輯數(shù)據(jù)。對于Ajax,當(dāng)用戶單擊Edit時,可以將靜態(tài)表格刷新為內(nèi)容可編輯的表格。用戶單擊Done之后,就可以發(fā)出一個Ajax請求來更新服務(wù)器,并刷新表格,使其包含靜態(tài)、只讀的數(shù)據(jù)。

      一切皆有可能!但愿它能夠激發(fā)您開始開發(fā)自己的基于Ajax的站點。然而,在開始之前,讓我們介紹一個現(xiàn)有的Web站點,它遵循傳統(tǒng)的提交/等待/重新顯示的范例,我們還將討論Ajax如何提升用戶體驗。

       Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個中間層,使用戶操作與服務(wù)器響應(yīng)異步化。這樣把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的。

    我們以兩個驗證通行證帳號是否存在的例子來講述AJAX在實際中的應(yīng)用:

    (1)用文本字符串的方式返回服務(wù)器的響應(yīng)來驗證網(wǎng)易通行證帳號是否存在;

    (2)以XMLDocument對象方式返回響應(yīng)來驗證金山通行證帳號是否存在;

    首先,我們需要用JavaScript來創(chuàng)建XMLHttpRequest 類向服務(wù)器發(fā)送一個HTTP請求, XMLHttpRequest 類首先由Internet Explorer以ActiveX對象引入,被稱為XMLHTTP。 后來Mozilla﹑Netscape﹑Safari 和其他瀏覽器也提供了XMLHttpRequest類,不過它們創(chuàng)建XMLHttpRequest類的方法不同。

    對于Internet Explorer瀏覽器,創(chuàng)建XMLHttpRequest 方法如下:

    xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0
    xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP");
    xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");

    由于在不同Internet Explorer瀏覽器中XMLHTTP版本可能不一致,為了更好的兼容不同版本的Internet Explorer瀏覽器,因此我們需要根據(jù)不同版本的Internet Explorer瀏覽器來創(chuàng)建XMLHttpRequest類,上面代碼就是根據(jù)不同的Internet Explorer瀏覽器創(chuàng)建XMLHttpRequest類的方法。

    對于Mozilla﹑Netscape﹑Safari等瀏覽器,創(chuàng)建XMLHttpRequest 方法如下:xmlhttp_request = new XMLHttpRequest();

    如果服務(wù)器的響應(yīng)沒有XML mime-type header,某些Mozilla瀏覽器可能無法正常工作。 為了解決這個問題,如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header。

    xmlhttp_request = new XMLHttpRequest();
    xmlhttp_request.overrideMimeType('text/xml');

    在實際應(yīng)用中,為了兼容多種不同版本的瀏覽器,一般將創(chuàng)建XMLHttpRequest類的方法寫成如下形式:

    try{
    if( window.ActiveXObject ){
    for( var i = 5; i; i-- ){
    try{
    if( i == 2 ){
    xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }
    else{
    xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
    xmlhttp_request.setRequestHeader("Content-Type","text/xml");
    xmlhttp_request.setRequestHeader("Content-Type","gb2312"); }
    break;}
    catch(e){
    xmlhttp_request = false; } } }
    else if( window.XMLHttpRequest )
    { xmlhttp_request = new XMLHttpRequest();
    if (xmlhttp_request.overrideMimeType)
    { xmlhttp_request.overrideMimeType('text/xml'); } } }
    catch(e){ xmlhttp_request = false; }

    在定義了如何處理響應(yīng)后,就要發(fā)送請求了。可以調(diào)用HTTP請求類的open()和send()方法,如下所示:

    xmlhttp_request.open('GET', URL, true);
    xmlhttp_request.send(null);

    open()的第一個參數(shù)是HTTP請求方式—GET,POST或任何服務(wù)器所支持的您想調(diào)用的方式。 按照HTTP規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求。

    第二個參數(shù)是請求頁面的URL。

    第三個參數(shù)設(shè)置請求是否為異步模式。如果是TRUE,JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng)。這就是"AJAX"中的"A"。

    用JavaScript來創(chuàng)建XMLHttpRequest 類向服務(wù)器發(fā)送一個HTTP請求后,接下來要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么。這需要告訴HTTP請求對象用哪一個JavaScript函數(shù)處理這個響應(yīng)。可以將對象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:

    xmlhttp_request.onreadystatechange =FunctionName;

    FunctionName是用JavaScript創(chuàng)建的函數(shù)名,注意不要寫成FunctionName(),當(dāng)然我們也可以直接將JavaScript代碼創(chuàng)建在onreadystatechange之后,例如:

    xmlhttp_request.onreadystatechange = function(){
    // JavaScript代碼段
    };

    首先要檢查請求的狀態(tài)。只有當(dāng)一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。XMLHttpRequest 提供了readyState屬性來對服務(wù)器響應(yīng)進(jìn)行判斷。

    readyState的取值如下:

    0 (未初始化)

    1 (正在裝載)

    2 (裝載完畢)

    3 (交互中)

    4 (完成)

    所以只有當(dāng)readyState=4時,一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。具體代碼如下:

    if (http_request.readyState == 4) { // 收到完整的服務(wù)器響應(yīng) }
    else { // 沒有收到完整的服務(wù)器響應(yīng) }

    當(dāng)readyState=4時,一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,接著,函數(shù)會檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值。完整的狀態(tài)取值可參見W3C文檔。當(dāng)HTTP服務(wù)器響應(yīng)的值為200時,表示狀態(tài)正常。

    在檢查完請求的狀態(tài)值和響應(yīng)的HTTP狀態(tài)值后,就可以處理從服務(wù)器得到的數(shù)據(jù)了。有兩種方式可以得到這些數(shù)據(jù):

    (1) 以文本字符串的方式返回服務(wù)器的響應(yīng)

    (2) 以XMLDocument對象方式返回響應(yīng)

    實例一: 用文本字符串的方式返回服務(wù)器的響應(yīng)來驗證網(wǎng)易通行證帳號是否存在

    首先,我們登陸網(wǎng)易通行證注冊頁面,可以看到檢測用戶名是否存在是將用戶名提交給checkssn.jsp頁面進(jìn)行判斷,格式為:

    reg.163.com/register/checkssn.jsp?username=用戶名

    根據(jù)上面講到的方法,我們可以利用AJAX技術(shù)對網(wǎng)易通行證用戶名進(jìn)行檢測:

    第一步:新建一個基于Xhtml標(biāo)準(zhǔn)的網(wǎng)頁,在區(qū)域插入Javascript函數(shù)如下:

    function getXMLRequester( )

    { var xmlhttp_request = false;

    try

    { if( window.ActiveXObject )

    { for( var i = 5; i; i-- ){

    try{

    if( i == 2 )

    { xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }

    else

    { xmlhttp_request = new ActiveXObject

    ( "Msxml2.XMLHTTP." + i + ".0" );

    xmlhttp_request.setRequestHeader("Content-Type","text/xml");

    xmlhttp_request.setRequestHeader("Content-Type","gb2312"); }

    break;}

    catch(e){ xmlhttp_request = false; } } }

    else if( window.XMLHttpRequest )

    { xmlhttp_request = new XMLHttpRequest();

    if (xmlhttp_request.overrideMimeType)

    { xmlhttp_request.overrideMimeType('text/xml'); } } }

    catch(e){ xmlhttp_request = false; }

    return xmlhttp_request ; }

    function IDRequest(n) { //定義收到服務(wù)器的響應(yīng)后需要執(zhí)行的JavaScript函數(shù)

    url=n+document.getElementById('163id').value;//定義網(wǎng)址參數(shù)

    xmlhttp_request=getXMLRequester();//調(diào)用創(chuàng)建XMLHttpRequest的函數(shù)

    xmlhttp_request.onreadystatechange = doContents;//調(diào)用doContents函數(shù)

    xmlhttp_request.open('GET', url, true);

    xmlhttp_request.send(null); }

    function doContents()

    { if (xmlhttp_request.readyState == 4) {// 收到完整的服務(wù)器響應(yīng)

    if (xmlhttp_request.status == 200) {//HTTP服務(wù)器響應(yīng)的值OK

    document.getElementById('message').innerHTML = xmlhttp_request.responseText;

    //將服務(wù)器返回的字符串寫到頁面中ID為message的區(qū)域 }

    else { alert(http_request.status); } } }

    在區(qū)域建立一個文本框,id為163id,再建一個id為messsge的空白區(qū)域用來顯示返回字符串(也可以通過Javascript函數(shù)截取一部分字符串顯示):

    <input type=text id="163id">
    <span id="message"></span>

    這樣,一個基于AJAX技術(shù)的用戶名檢測頁面就做好了,不過這個頁面將返回服務(wù)器響應(yīng)生成頁面的所有字符串,當(dāng)然還可以對返回的字符串進(jìn)行一些操作,便于應(yīng)用到不同的需要當(dāng)中。

    實例二: 以XMLDocument對象方式返回響應(yīng)來驗證金山通行證帳號是否存在

    在上面的例子中,當(dāng)服務(wù)器對HTTP請求的響應(yīng)被收到后,我們會調(diào)用請求對象的reponseText屬性。該屬性包含了服務(wù)器返回響應(yīng)文件的內(nèi)容。現(xiàn)在我們以XMLDocument對象方式返回響應(yīng),此時將不再需要reponseText屬性而使用responseXML屬性。

    首先登陸金山通行證注冊頁面,我們發(fā)現(xiàn)金山通行證用戶名的檢測方式為: pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用戶名,并且返回XML數(shù)據(jù):

    isExistedUid -2

    當(dāng)result值為-1時表示此用戶名已被注冊,當(dāng)result值為-2時表示此用戶名尚未注冊,因此通過對result值的判斷可以知道用戶名是否被注冊。

    對上例代碼進(jìn)行修改:

    首先找到

    document.getElementById('message').innerHTML = xmlhttp_request.responseText;

    改為:

    var response = xmlhttp_request.responseXML.documentElement;

    var result = response.getElementsByTagName('result')[0].firstChild.data;//返回result節(jié)點數(shù)據(jù)

    if(result ==-2){

    document.getElementById('message').innerHTML = "用戶名"+document.getElementById('163id').value+"尚未注冊";}

    else if(result ==-1){

    document.getElementById('message').innerHTML = "對不起,用戶名"+document.getElementById('163id').value+"已經(jīng)注冊";}

    通過以上兩個實例說明了AJAX的客戶端基礎(chǔ)應(yīng)用,采用的是網(wǎng)易和金山現(xiàn)成的服務(wù)器端程序,當(dāng)然為了開發(fā)合適自己頁面的程序,還需要對自己編寫服務(wù)器端程序,這設(shè)計到程序語言及數(shù)據(jù)庫的操作,對于有一定程序基礎(chǔ)的讀者一定不是很難的事情。



    補(bǔ)充:
    1.Ajax:著名希臘史詩伊利亞特中英雄埃阿斯的名字。
    2.Ajax:荷蘭著名足球俱樂部阿賈克斯,以培養(yǎng)青年球員而著稱,并多次奪得歐洲冠軍杯。


    posted on 2007-12-20 13:54 Tiger1102 閱讀(200) 評論(0)  編輯  收藏 所屬分類: 每日進(jìn)階
    主站蜘蛛池模板: 国产成年无码久久久免费| 四虎在线最新永久免费| 亚洲成色在线影院| 妞干网免费视频观看| 美景之屋4在线未删减免费| 亚洲国产第一站精品蜜芽| 免费无码肉片在线观看| 亚洲成a人片在线观看老师| 国产在线观看免费av站| 亚洲精品成人区在线观看| 97免费人妻在线视频| 男女猛烈xx00免费视频试看| 亚洲AV美女一区二区三区| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 国产线视频精品免费观看视频| 日韩亚洲国产二区| 1区2区3区产品乱码免费| 美女被暴羞羞免费视频| 亚洲VA综合VA国产产VA中| 99久久精品免费视频| 人妻仑刮八A级毛片免费看| 亚洲日本在线观看网址| 国产午夜亚洲精品午夜鲁丝片 | 野花高清在线电影观看免费视频| 亚洲一区二区影视| 日韩亚洲欧洲在线com91tv| 成人免费淫片在线费观看| 欧洲人成在线免费| 一进一出60分钟免费视频| 亚洲性色AV日韩在线观看| 亚洲另类激情综合偷自拍| 久久亚洲精品无码播放| 无码av免费网站| 丁香花在线观看免费观看图片 | 香港经典a毛片免费观看看| 亚洲一级免费视频| 亚洲一区免费观看| 日本特黄特黄刺激大片免费| 免费国产va视频永久在线观看| 中文字幕人成人乱码亚洲电影 | 中文字幕亚洲免费无线观看日本|