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

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

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

    隨筆 - 3, 文章 - 6, 評論 - 0, 引用 - 0
    數(shù)據(jù)加載中……

    Ajax Getting Started

    Getting Started

    轉(zhuǎn)載google這篇發(fā)表在Devmo上的AJAX: Getting Started。

    目錄

    1. 什么是AJAX?
    2. 第一步:如何發(fā)出一個HTTP請求
    3. 第二步:處理服務(wù)器的響應(yīng)
    4. 第三步:一個簡單的例子
    5. 第四步:與XML響應(yīng)協(xié)同工作

    什么是AJAX

    AJAX是一個新的合成術(shù)語,隱含了兩個已經(jīng)存在多年的JavaScript特性,但是直到最近,隨著一些諸如Gmail、Google Suggest以及Google Maps的轟動,才被許多網(wǎng)絡(luò)開發(fā)者所注意到。

    我們所討論的兩個JavaScript的特性是你能夠:

    • 向服務(wù)器發(fā)出請求而不需重新加載任何頁面
    • 解析XML文檔并且與之協(xié)同工作

    AJAX是一個縮寫,A是指"asynchronous"(異步的),它表示你可以在向服務(wù)器發(fā)出一個HTTP請求后,邊做其他的事情,邊等待服務(wù)器的響應(yīng)。JA表示"JavaScript",X表示"XML"(可擴展標(biāo)記語言)。

    第一步:如何發(fā)出一個HTTP請求

    為了用JavaScript向服務(wù)器發(fā)出一個HTTP請求,你需要一個類的實例來提供給你這種功能。這個類原本在IE里被作為一個ActiveX對象提出,叫XMLHTTP。然后,Mozilla、Safari以及一些其他的瀏覽器相繼跟隨,出現(xiàn)了一個XMLHttpRequest類,其支持微軟的ActiveX對象原本的方法和屬性。

    所以,為了能夠跨瀏覽器地創(chuàng)建這個類的對象,你需要這樣:

    						if (window.XMLHttpRequest) { // Mozilla, Safari,
    http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    (以上例子中的代碼,是一個用來構(gòu)建XMLHTTP實例的簡單版本,實際使用時的例子請參見本文的第三步)

    如果服務(wù)器端的響應(yīng)中沒有包含XML的mime-type報頭(header),有些版本的Mozilla瀏覽器可能不會處理。所以,為了安全起見,你可以用一個特殊的方法來給服務(wù)器端發(fā)出的響應(yīng)強加上這個報頭,以防其不是text/xml類型。

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

    下一步就是你來決定在服務(wù)器對你的請求作出響應(yīng)后,你準(zhǔn)備做什么。這一階段,你只需要告訴HTTP請求對象(HTTP request object)用哪一個JavaScript函數(shù)來處理這一響應(yīng)。這一步用設(shè)置該對象onreadystatechange屬性為相應(yīng)的JavaScript函數(shù)名來實現(xiàn):

    http_request.onreadystatechange = nameOfTheFunction;

    注意,在函數(shù)名后面沒有括號。另外如下定義處理響應(yīng)的函數(shù):

    http_request.onreadystatechange = function(){
    // 處理響應(yīng)
    };

    接下來,既然你已經(jīng)聲明了在接到響應(yīng)后干什么,你就需要去發(fā)出請求。你需要調(diào)用HTTP請求類的open()send()方法:

    http_request.open('GET', 'http://www.example.org/some.file', true);
    http_request.send(null);
    • open()方法的第一個參數(shù)是HTTP請求的方式——GET、POST、HEAD或者任何其它你想使用的,你的服務(wù)器支持的方式。方式的名稱要大寫,否則有些瀏覽器(如Firefox)可能就不會處理請求??梢匀?W3C specs獲取更多的你可以使用的HTTP請求方式的信息。
    • 第二個參數(shù)是你所請求頁面的URL。
    • 第三個參數(shù)是用來設(shè)置請求是否為異步的。如果是TRUE,則在服務(wù)器尚未返回響應(yīng)的時候,JavaScript的函數(shù)會繼續(xù)執(zhí)行。這也就是AJAX中的A的含義。

    send()方法的參數(shù)可以使任何你希望傳遞給服務(wù)器的數(shù)據(jù),數(shù)據(jù)應(yīng)該為如下格式的查詢串:

    name=value&anothername=othervalue&so=on

    第二步:處理服務(wù)器響應(yīng)

    記住,當(dāng)你向服務(wù)器發(fā)出了一個請求,你也就發(fā)出了一個被設(shè)計用來處理響應(yīng)的JavaScript函數(shù)的名字。

    http_request.onreadystatechange = nameOfTheFunction;

    我們來看看這個函數(shù)都應(yīng)該做些什么。首先,其需要檢查請求的狀態(tài),如果狀態(tài)的值為4,那么就意味著全部的服務(wù)器響應(yīng)都已接受完畢,你可以繼續(xù)來處理了。

    if (http_request.readyState == 4) {
    // 一切就緒,相映已接受完成
    } else {
    //尚未就緒
    }
    readyState全部值的列表如下:
    • 0(未初始化/uninitialized)
    • 1(正在加載/loading)
    • 2(加載完畢/loaded)
    • 3(交互/interactive)
    • 4(完成/complete)
    (來源)

    下一步是檢查HTTP服務(wù)器響應(yīng)的情況代碼。所有可能的代碼都被列在了W3C的網(wǎng)站上。目前,我們只對200 OK響應(yīng)感興趣。

    if (http_request.status == 200) {
    // 棒極了!
    } else {
    // 請求出了些問題,
    // 比如響應(yīng)可能是404(Not Found),未找到
    // 或者500,內(nèi)部服務(wù)器錯誤
    }

    在你檢查完請求的狀態(tài)和HTTP響應(yīng)情況后,你就可以自己決定對服務(wù)器發(fā)送給你的數(shù)據(jù)作什么樣的處理了。你有兩種途徑來訪問這些數(shù)據(jù):

    • http_request.responseText將會把服務(wù)器的響應(yīng)作為一個文本串返回
    • http_request.responseXML將把響應(yīng)作為一個XMLDocument對象返回,你可以用JavaScript的文檔對象模型(DOM)的函數(shù)來處理

    第三步:一個簡單的例子

    我現(xiàn)在來做一個簡單的HTTP請求。我們的JavaScript腳本將會請求一個HTML文檔,test.html,其包含了一段文本——“這是一個測試。”——然后我們會alert() test.html的內(nèi)容。

    <script type="text/javascript" language="javascript">
    var http_request = false;

    function makeRequest(url) {

    http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...

    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    http_request.overrideMimeType('text/xml');
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }

    if (!http_request) {
    alert('Giving up?:( Cannot create an XMLHTTP instance');
    return false;
    }
    http_request.onreadystatechange = alertContents;
    http_request.open('GET', url, true);
    http_request.send(null);

    }

    function alertContents() {

    if (http_request.readyState == 4) {
    if (http_request.status == 200) {
    alert(http_request.responseText);
    } else {
    alert('There was a problem with the request.');
    }
    }

    }
    </script>

    <span
    style="cursor: pointer; text-decoration: underline"
    onclick="makeRequest('test.html')">
    發(fā)出請求
    </span>

    在這個例子中:

    • 用戶在瀏覽器里點擊“發(fā)出請求”(make a request);
    • 這會調(diào)用makeRequest()函數(shù),并且附有參數(shù)test.html,一個自阿同一目錄下的HTML文檔的名字。
    • 請求被發(fā)出,然后(onreadystatechange)操作被傳遞給alertContents();
    • alertContents()檢查響應(yīng)是否被接收和是否狀態(tài)為“OK”,然后alert() test.html文件的內(nèi)容。

    你可以在這里測試這個例子,并且可以在這里看見測試文件。

    與XML響應(yīng)協(xié)同工作

    在上個例子中,在HTTP響應(yīng)被接收完畢后,我們和使用了請求對象的responseText屬性,其包含了test.html文件的內(nèi)容。現(xiàn)在,讓我們試試responseXML屬性。

    讓我們現(xiàn)在就創(chuàng)建一個有效的XML文檔,這個文檔稍后會被我們請求。文檔(test.xml)包括:

    <?xml version="1.0"?encoding="utf-8"??>
    <root>
    這是個測試.
    </root>
    我們只需要在腳本中用下面的內(nèi)容替換請求行:
    ...
    onclick="makeRequest('test.xml)">
    ...
    然后在alertContents()里把alert()行替換成alert(http_request.responseText);,并且,在其上方寫下:
    var xmldoc = http_request.responseXML;
    var root_node = xmldoc.getElementsByTagName('root').item(0);
    alert(root_node.firstChild.data);

    這樣,我們獲取了responseXML中的XMLDocument對象,并且用DOM方法來訪問了XML文檔中所包含的某些內(nèi)容。你可以在這里瀏覽到test.xml,更新后的腳本可以在這里得到。

    可以去獲取更多的DOM方法。

    posted on 2006-08-24 11:37 drh0r 閱讀(157) 評論(0)  編輯  收藏 所屬分類: WEB開發(fā)


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 99久久久国产精品免费牛牛四川| 免费夜色污私人影院网站| 无码av免费一区二区三区试看| 自拍偷自拍亚洲精品被多人伦好爽| 福利片免费一区二区三区| 国产jizzjizz免费看jizz| 污污的视频在线免费观看| 亚洲精品成人在线| 中文字字幕在线高清免费电影| 在线日韩日本国产亚洲| a在线视频免费观看| 亚洲高清视频在线观看| xxxxx免费视频| 亚洲综合激情五月丁香六月| 免费看香港一级毛片| 国产精品亚洲а∨无码播放麻豆| 亚洲成a人在线看天堂无码| 久青草视频97国内免费影视| 亚洲成a人片在线观看无码| 亚洲精品国产免费| 亚洲Av永久无码精品黑人| 免费播放特黄特色毛片| 国产免费爽爽视频在线观看| 亚洲精品美女久久久久| 啦啦啦手机完整免费高清观看| 国产亚洲日韩在线a不卡| 亚洲人成人77777网站| 99在线精品免费视频九九视| 亚洲精品无播放器在线播放| 亚洲性久久久影院| 很黄很黄的网站免费的| 国产亚洲成在线播放va| 91亚洲国产成人精品下载| 在线观看91精品国产不卡免费| 国产免费久久精品99久久| 亚洲日本在线播放| 日产国产精品亚洲系列| 最近中文字幕完整版免费高清| 亚洲av色香蕉一区二区三区| 国产亚洲色婷婷久久99精品| 成熟女人特级毛片www免费|