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

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

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

    prototype對ajax的支持

    Ajax 對象

    上面提到的共通方法非常好,但是面對它吧,它們不是最高級的那類東西。它們是嗎?你很可能自己編寫了這些甚至在你的腳本里面有類似功能的方法。但是這些方法只是冰山一角。

    我很肯定你對prototype.js感興趣的原因很可能是由于它的AJAX能力。所以讓我們解釋當你需要完成AJAX邏輯的時候,這個包如何讓它更容易。

    Ajax 對象是一個預定義對象,由這個包創建,為了封裝和簡化編寫AJAX 功能涉及的狡猾的代碼。 這個對象包含一系列的封裝AJAX邏輯的類。我們來看看它們的一些。

    1.4.1. 使用 Ajax.Request

    如果你不使用任何的幫助程序包,你很可能編寫了整個大量的代碼來創建XMLHttpRequest對象并且異步的跟蹤它的進程, 然后解析出響應 然后處理它。當你不需要支持多于一種類型的瀏覽器時你會感到非常的幸運。

    為了支持 AJAX 功能。這個包定義了 Ajax.Request 類。

    假如你有一個應用程序可以通過url http://yoursever/app/get_sales?empID=1234&year=1998與服務器通信。它返回下面這樣的XML 響應。

    <?xml version="1.0" encoding="utf-8" ?>
    <ajax-response>
    <response type="object" id="productDetails">
    <monthly-sales>
    <employee-sales>
    <employee-id>1234</employee-id>
    <year-month>1998-01</year-month>
    <sales>$8,115.36</sales>
    </employee-sales>
    <employee-sales>
    <employee-id>1234</employee-id>
    <year-month>1998-02</year-month>
    <sales>$11,147.51</sales>
    </employee-sales>
    </monthly-sales>
    </response>
    </ajax-response>

    Ajax.Request對象和服務器通信并且得到這段XML是非常簡單的。下面的例子演示了它是如何完成的。

    <script>
    function searchSales()
    {
    var empID = $F('lstEmployees');
    var y = $F('lstYears');
    var url = 'http://yoursever/app/get_sales';
    var pars = 'empID=' + empID + '&year=' + y;
    var myAjax = new Ajax.Request(
    url,
    {method: 'get', parameters: pars, onComplete: showResponse}
    );


    }

    function showResponse(originalRequest)
    {
    //put returned XML in the textarea
    $('result').value = originalRequest.responseText;
    }
    </script>

    <select id="lstEmployees" size="10" onchange="searchSales()">
    <option value="5">Buchanan, Steven</option>
    <option value="8">Callahan, Laura</option>
    <option value="1">Davolio, Nancy</option>
    </select>
    <select id="lstYears" size="3" onchange="searchSales()">
    <option selected="selected" value="1996">1996</option>
    <option value="1997">1997</option>
    <option value="1998">1998</option>
    </select>
    <br><textarea id=result cols=60 rows=10 ></textarea>

    你看到傳入 Ajax.Request構造方法的第二個對象了嗎? 參數{method: 'get', parameters: pars, onComplete: showResponse} 表示一個匿名對象的真實寫法。他表示你傳入的這個對象有一個名為 method 值為 'get'的屬性,另一個屬性名為 parameters 包含HTTP請求的查詢字符串,和一個onComplete 屬性/方法包含函數showResponse

    還有一些其它的屬性可以在這個對象里面定義和設置,如 asynchronous,可以為truefalse 來決定AJAX對服務器的調用是否是異步的(默認值是 true)。

    這個參數定義AJAX調用的選項。在我們的例子中,在第一個參數通過HTTP GET命令請求那個url,傳入了變量 pars包含的查詢字符串, Ajax.Request 對象在它完成接收響應的時候將調用showResponse 方法。

    也許你知道, XMLHttpRequest在HTTP請求期間將報告進度情況。這個進度被描述為四個不同階段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 對象在任何階段調用自定義方法 ,Complete 是最常用的一個。想調用自定義的方法只需要簡單的在請求的選項參數中的名為 onXXXXX 屬性/方法中提供自定義的方法對象。 就像我們例子中的 onComplete 。你傳入的方法將會被用一個參數調用,這個參數是 XMLHttpRequest 對象自己。你將會用這個對象去得到返回的數據并且或許檢查包含有在這次調用中的HTTP結果代碼的 status 屬性。

    還有另外兩個有用的選項用來處理結果。我們可以在onSuccess 選項處傳入一個方法,當AJAX無誤的執行完后調用, 相反的,也可以在onFailure選項處傳入一個方法,當服務器端出現錯誤時調用。正如onXXXXX 選項傳入的方法一樣,這兩個在被調用的時候也傳入一個帶有AJAX請求的XMLHttpRequest對象。

    我們的例子沒有用任何有趣的方式處理這個 XML響應, 我們只是把這段XML放進了一個文本域里面。對這個響應的一個典型的應用很可能就是找到其中的想要的信息,然后更新頁面中的某些元素, 或者甚至可能做某些XSLT轉換而在頁面中產生一些HTML。

    更完全的解釋,請參照 Ajax.Request 參考Ajax選項參考

    1.4.2. 使用 Ajax.Updater

    如果你的服務器的另一端返回的信息已經是HTML了,那么使用這個程序包中 Ajax.Updater 類將使你的生活變得更加得容易。用它你只需提供哪一個元素需要被AJAX請求返回的HTML填充就可以了,例子比我寫說明的更清楚。

    <script>
    function getHTML()
    {
    var url = 'http://yourserver/app/getSomeHTML';
    var pars = 'someParameter=ABC';

    var myAjax = new Ajax.Updater('placeholder', url, {method: 'get', parameters: pars});

    }
    </script>

    <input type=button value=GetHtml onclick="getHTML()">
    <div id="placeholder"></div>

    你可以看到,這段代碼比前面的例子更加簡潔,不包括 onComplete 方法,但是在構造方法中傳入了一個元素id。 我們來稍稍修改一下代碼來描述如何在客戶端處理服務器段錯誤成為可能。

    我們將加入更多的選項, 指定處理錯誤的一個方法。這個是用 onFailure 選項來完成的。

    我們也指定了一個 placeholder 只有在成功請求之后才會被填充。為了完成這個目的我們修改了第一個參數從一個簡單的元素id到一個帶有兩個屬性的對象, success (一切OK的時候被用到) 和 failure (有地方出問題的時候被用到) 在下面的例子中沒有用到failure屬性,而僅僅在 onFailure 處使用了 reportError 方法。

    <script>
    function getHTML()
    {
    var url = 'http://yourserver/app/getSomeHTML';
    var pars = 'someParameter=ABC';
    var myAjax = new Ajax.Updater(
    {success: 'placeholder'},
    url,
    {method: 'get', parameters: pars, onFailure: reportError});


    }

    function reportError(request)
    {
    alert('Sorry. There was an error.');
    }
    </script>

    <input type=button value=GetHtml onclick="getHTML()">
    <div id="placeholder"></div>

    如果你的服務器邏輯是返回JavaScript 代碼而不是單純的 HTML 標記, Ajax.Updater對象可以執行那段JavaScript代碼。為了使這個對象對待響應為JavaScript,你只需在最后參數的對象構造方法中簡單加入evalScripts: true屬性。


    posted on 2007-11-16 10:51 劉錚 閱讀(798) 評論(0)  編輯  收藏 所屬分類: JavaScript

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統計

    留言簿(1)

    文章分類(141)

    文章檔案(147)

    搜索

    最新評論

    主站蜘蛛池模板: 国产精品免费视频观看拍拍| 国产亚洲精品美女2020久久| 一级**爱片免费视频| 日本xxwwxxww在线视频免费| 亚洲sss综合天堂久久久| 999国内精品永久免费观看| 亚洲第一精品福利| 亚洲免费在线播放| 91情国产l精品国产亚洲区| 精品国产sm捆绑最大网免费站| 亚洲欧洲国产成人精品| 久久久久久久久免费看无码| 亚洲第一区二区快射影院| 毛片a级毛片免费播放下载| 中文字幕亚洲码在线| 永久免费观看的毛片的网站| 色欲aⅴ亚洲情无码AV蜜桃| 一区二区三区亚洲视频| 产传媒61国产免费| 亚洲AV永久纯肉无码精品动漫| 久久午夜夜伦鲁鲁片免费无码| 亚洲国产午夜精品理论片| 无码永久免费AV网站| 麻豆91免费视频| 国产亚洲一区二区手机在线观看| 99re免费在线视频| 亚洲无人区码一二三码区别图片| 国产成人免费一区二区三区| 两性色午夜免费视频| 亚洲自偷精品视频自拍| 成人性生交大片免费看午夜a| 看亚洲a级一级毛片| 伊人亚洲综合青草青草久热| 24小时日本电影免费看| 国产AV无码专区亚洲AV蜜芽| 亚洲最大激情中文字幕| 最近中文字幕免费mv视频7| 岛国岛国免费V片在线观看| 亚洲精品中文字幕乱码| 亚洲av无码天堂一区二区三区| 久久国产精品一区免费下载|