使用prototype.js進行異步操作
更新時間:2007年02月07日 00:00:00 作者:
首先下載prototype.js這個類包,然后包含在你的<html>頁面中
<script src='prototype.js'></script>
創(chuàng)建XMLHttpRequest對象并且異步的跟蹤它的進程, 然后解析出響應(yīng) 然后處理它可能這是ajax的根本意義,它最具威力的地方,但你能出兼容各種不同瀏覽器的代碼,可能會令你痛苦不堪,但幸好救苦救難的prototype.js提供Ajax.Request 類,讓你擺脫這些困擾.
假如你有一個應(yīng)用程序可以通過url http://ajax.boogu.com/cm.html與服務(wù)器通信。它返回下面這樣的XML 響應(yīng)。
(當然這是不可能的)
<?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對象和服務(wù)器通信并且得到這段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構(gòu)造方法的第二個對象了嗎? 參數(shù){method: 'get', parameters: pars, onComplete: showResponse} 表示一個匿名對象的真實寫法。他表示你傳入的這個對象有一個名為 method 值為 'get'的屬性,另一個屬性名為 parameters 包含HTTP請求的查詢字符串,和一個onComplete 屬性/方法包含函數(shù)showResponse。
還有一些其它的屬性可以在這個對象里面定義和設(shè)置,如 asynchronous,可以為true 或 false 來決定AJAX對服務(wù)器的調(diào)用是否是異步的(默認值是 true)。
這個參數(shù)定義AJAX調(diào)用的選項。在我們的例子中,在第一個參數(shù)通過HTTP GET命令請求那個url,傳入了變量 pars包含的查詢字符串, Ajax.Request 對象在它完成接收響應(yīng)的時候?qū)⒄{(diào)用showResponse 方法。
也許你知道, XMLHttpRequest在HTTP請求期間將報告進度情況。這個進度被描述為四個不同階段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 對象在任何階段調(diào)用自定義方法 ,Complete 是最常用的一個。想調(diào)用自定義的方法只需要簡單的在請求的選項參數(shù)中的名為 onXXXXX 屬性/方法中提供自定義的方法對象。 就像我們例子中的 onComplete 。你傳入的方法將會被用一個參數(shù)調(diào)用,這個參數(shù)是 XMLHttpRequest 對象自己。你將會用這個對象去得到返回的數(shù)據(jù)并且或許檢查包含有在這次調(diào)用中的HTTP結(jié)果代碼的 status 屬性。
龍去脈
onComplete 這個值要傳遞一個函數(shù)參數(shù)過來,像上述的showResponse,這個函數(shù),默認是會傳遞會有一個originalRequest傳遞過來
還有另外兩個有用的選項用來處理結(jié)果。我們可以在onSuccess 選項處傳入一個方法,當AJAX無誤的執(zhí)行完后調(diào)用, 相反的,也可以在onFailure選項處傳入一個方法,當服務(wù)器端出現(xiàn)錯誤時調(diào)用。正如onXXXXX 選項傳入的方法一樣,這兩個在被調(diào)用的時候也傳入一個帶有AJAX請求的XMLHttpRequest對象。
獲取了這個originalRequestc以后,如果是一個xml對象的話,就能有
var xml = originalRequest.responseXML;
這樣就可以獲得第一個monthly-sales的文本值了
var monthly-sales = xml.getElementByTagName('monthly-sales')[0].text
prototype.js這把瑞士軍刀,確實是我們居家旅行,編寫js代碼的必備工具
<script src='prototype.js'></script>
創(chuàng)建XMLHttpRequest對象并且異步的跟蹤它的進程, 然后解析出響應(yīng) 然后處理它可能這是ajax的根本意義,它最具威力的地方,但你能出兼容各種不同瀏覽器的代碼,可能會令你痛苦不堪,但幸好救苦救難的prototype.js提供Ajax.Request 類,讓你擺脫這些困擾.
假如你有一個應(yīng)用程序可以通過url http://ajax.boogu.com/cm.html與服務(wù)器通信。它返回下面這樣的XML 響應(yīng)。
(當然這是不可能的)
<?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對象和服務(wù)器通信并且得到這段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構(gòu)造方法的第二個對象了嗎? 參數(shù){method: 'get', parameters: pars, onComplete: showResponse} 表示一個匿名對象的真實寫法。他表示你傳入的這個對象有一個名為 method 值為 'get'的屬性,另一個屬性名為 parameters 包含HTTP請求的查詢字符串,和一個onComplete 屬性/方法包含函數(shù)showResponse。
還有一些其它的屬性可以在這個對象里面定義和設(shè)置,如 asynchronous,可以為true 或 false 來決定AJAX對服務(wù)器的調(diào)用是否是異步的(默認值是 true)。
這個參數(shù)定義AJAX調(diào)用的選項。在我們的例子中,在第一個參數(shù)通過HTTP GET命令請求那個url,傳入了變量 pars包含的查詢字符串, Ajax.Request 對象在它完成接收響應(yīng)的時候?qū)⒄{(diào)用showResponse 方法。
也許你知道, XMLHttpRequest在HTTP請求期間將報告進度情況。這個進度被描述為四個不同階段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 對象在任何階段調(diào)用自定義方法 ,Complete 是最常用的一個。想調(diào)用自定義的方法只需要簡單的在請求的選項參數(shù)中的名為 onXXXXX 屬性/方法中提供自定義的方法對象。 就像我們例子中的 onComplete 。你傳入的方法將會被用一個參數(shù)調(diào)用,這個參數(shù)是 XMLHttpRequest 對象自己。你將會用這個對象去得到返回的數(shù)據(jù)并且或許檢查包含有在這次調(diào)用中的HTTP結(jié)果代碼的 status 屬性。
龍去脈
onComplete 這個值要傳遞一個函數(shù)參數(shù)過來,像上述的showResponse,這個函數(shù),默認是會傳遞會有一個originalRequest傳遞過來
還有另外兩個有用的選項用來處理結(jié)果。我們可以在onSuccess 選項處傳入一個方法,當AJAX無誤的執(zhí)行完后調(diào)用, 相反的,也可以在onFailure選項處傳入一個方法,當服務(wù)器端出現(xiàn)錯誤時調(diào)用。正如onXXXXX 選項傳入的方法一樣,這兩個在被調(diào)用的時候也傳入一個帶有AJAX請求的XMLHttpRequest對象。
獲取了這個originalRequestc以后,如果是一個xml對象的話,就能有
var xml = originalRequest.responseXML;
這樣就可以獲得第一個monthly-sales的文本值了
var monthly-sales = xml.getElementByTagName('monthly-sales')[0].text
prototype.js這把瑞士軍刀,確實是我們居家旅行,編寫js代碼的必備工具
您可能感興趣的文章:
- js 異步操作回調(diào)函數(shù)如何控制執(zhí)行順序
- async/await與promise(nodejs中的異步操作問題)
- thinkjs之頁面跳轉(zhuǎn)同步異步操作
- javascript-解決mongoose數(shù)據(jù)查詢的異步操作
- ES6 javascript的異步操作實例詳解
- 一個簡單的Node.js異步操作管理器分享
- 解決Angularjs異步操作后臺請求用$q.all排列先后順序問題
- js 實現(xiàn)圖片預(yù)加載(js操作 Image對象屬性complete ,事件onload 異步加載圖片)
- JS基于ES6新特性async await進行異步處理操作示例
- Javascript異步編程async實現(xiàn)過程詳解
- 如何優(yōu)雅地取消 JavaScript 異步任務(wù)
- JavaScript異步操作的幾種常見處理方法實例總結(jié)
相關(guān)文章
用prototype實現(xiàn)的簡單小巧的多級聯(lián)動菜單
用prototype實現(xiàn)的簡單小巧的多級聯(lián)動菜單...2007-03-03Prototype 學習 工具函數(shù)學習($A方法)
Prototype 學習 工具函數(shù)學習($A使用方法)2009-07-07