2ã€èŽ·å–ç¼–è¾‘å™¨ä¸æ–‡å—内容(在åšå®¢å‘å¸ƒæ—¶èŽ·å–æ— htmlä»£ç æ‘˜è¦ä½¿ç”¨åQ?/p>
3ã€è®¾¾|®ç¼–辑器ä¸å†…å®?/p>
在ä¸åŒçš„‹¹è§ˆå™¨ä¸Šé»˜è®¤çš„æ‹–æ‹½èƒ½è§£å†³çš„é—®é¢˜ç›¸å½“å°‘,所以有很多的框枉™ƒ½èƒ½å®žçŽ°è¿™ä¹ˆä¸ªåŠŸèƒ½.ä½¿ç”¨æ‹–æ‹½è¡ŒäØ“èƒ½å¾ˆå¥½çš„æ”¹å–„ç”¨æˆ·ä½“éªŒ,ž®¤å…¶æ˜¯åœ¨è´ç‰©çš„æ—¶å€™èƒ½è®©ç”¨æˆäh„Ÿåˆ°å¾ˆæ–°å¥‡å’Œä½“é?Script.aculo.us使用了三个类实现拖拽和排åº?它们是Draggable,Droppable,Sortable.è¦å®žçŽîC¸€ä¸ªå®Œæ•´çš„æ‹–æ‹½è¡ŒäØ“,需è¦Draggable,å’ŒDroppableçš„é…åˆä‹Éç”?ç”׃ºŽ˜q™è¿žä¸ªç±»çš„æ–¹æ³•比较多,我åªé€‰å–æ¯”è¾ƒå®žç”¨çš„å‡ ä¸ªæ–¹æ³•è¿›è¡Œä»‹¾l?˜q˜æ˜¯è€è§„çŸ?先看看Demo:http://www1.qcxy.hb.cn/qphy/Script_Aculo_Us/DragDrop.html
new Draggable("DraggableId"[,options])
主è¦é€‰é¡¹
˜q™é‡Œéœ€è¦è¯´æ˜Žçš„æ˜¯åÆˆéžæ‰€æœ‰çš„æ ‡ç¾éƒ½æ”¯æŒè¯¥è¡ŒäØ“,详细的情况请å‚阅官方文档
API
Droppables(æ³¨æ„æ˜¯å¤æ•°åÅžå¼?是一个抽象类,ä¸èƒ½è¢«å®žä¾‹åŒ–,åªæœ‰ä¸€äº›é™æ€æ–¹æ³?常用的方法有addå’Œmove,åˆ†åˆ«å¢žåŠ å¯æ”¾¾|®å…ƒç´?å’ŒåŽ»é™¤å¯æ”„¡½®å…ƒç´
addæ–ÒŽ³•:Dropables.add("ContainerId"[,options]),常用的选项
remove("ContainerId"),该方法去除容器的攄¡½®è¡ŒäØ“
(上é¢ä¾‹åçš„æºä»£ç )
Sortable是一¾l„å¯ä»¥é€šè¿‡æ‹–拽交æ¢ä½ç½®çš„å…ƒç´?å¯ä»¥å…ˆçœ‹çœ‹å®žä¾?
serialize(sortable)æ–ÒŽ³•:该方法返回当å‰å®¹å™¨å†…å…ƒç´ çš„æ¬¡åº?ä½†æ˜¯è¦æ±‚åå…ƒç´ çš„idå¿…é¡»ä»?item_"å¼€å¤?ä¸”è¿”å›žæ ¼å¼æœ‰è®²ç©¶,看下é¢çš„例å
<div id="horizontalSortable" class="item" style="margin-top:20px; height:40px;">
<div id="item_5">IE</div>
<div id="item_6">FireFox</div>
<div id="item_7">Safari</div>
<div id="item_8">Opera</div>
</div>
Sortable.create("horizontalSortable",
{
ghosting:true,
tag:'div',
constraint:'horizontal',
hoverclass:'hoverClass2'
});
Sortable.serialize('horizontalSortable')
//-->horizontalSortable[]=5&horizontalSortable[]=6&horizontalSortable[]=7&horizontalSortable[]=8
最åŽçœ‹ä¸€ä¸ªä¾‹å?å‰é¢æåˆ°çš„containment选项在æŸäº›æƒ…况下很有ç”?比如è¦å®žçŽîC¸¤ä¸ªå®¹å™¨é‡Œçš„å…ƒç´ å¯ä»¥äº’ç›æ€º¤æ¢åå…ƒç´ ,å³ä»Žä¸€ä¸ªå®¹å™¨æ‹–至ä×o一个容器ä¸.æ¥çœ‹ä¸‹é¢çš„例å?/p>
上é¢çš„例åå¯ä»¥å®žçްsortUlLeft,å’ŒsortUlRightçš„åå…ƒç´ äº’ç›¸äº¤æ¢
首先创å¾ä¸€ä¸ªjsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/effects.js"></script>
<script type="text/javascript" src="js/controls.js"></script>
<style>
div.auto_complete {
width: 350px;
background: #fff;
}
div.auto_complete ul {
border:1px solid #888;
margin:0;
padding:0;
width:100%;
list-style-type:none;
}
div.auto_complete ul li {
margin:0;
padding:3px;
}
div.auto_complete ul li.selected {
background-color: #ffb;
}
div.auto_complete ul strong.highlight {
color: #800;
margin:0;
padding:0;
}
</style>
</head>
<body>
<input type="text" id="autocomplete"/>
<div id="results" class="auto_complete"></div>
<script type="text/javascript">
new Ajax.Autocompleter(
"autocomplete",
"results",
"list.html", {
method: "GET"
}
);
</script>
</body>
</html>
list.html
<ul>
<li>Aria</li>
<li>Aaaa</li>
<li>Afdsa</li>
<li>bsa</li>
</ul>
上é¢list.htmlé‡‡ç”¨é™æ€é¡µé¢è¿”回列表,读者å¯ä»¥ä‹É用动æ€é¡µé¢è¿”回结果ã€?
ä½œäØ“ä¸€ä¸ªAjax开呿¡†æžÓž¼ŒPrototype对Ajaxå¼€å‘æä¾›äº†æœ‰åŠ›çš„æ”¯æŒã€‚在Prototypeä¸ï¼Œä¸ŽAjax相关的类和对象包括:Ajaxã€Ajax.Responsdersã€Ajax.Baseã€Ajax.Requestã€Ajax. PeriodicalUpdaterå’ŒAjax.UpdateråQŒå›¾2-3所½CÞZØ“˜q™äº›¾cÕd’Œå¯¹è±¡ä¹‹é—´çš„å…³¾pÕdŠå…¶å¸¸ç”¨å±žæ€§å’Œæ–ÒŽ³•åQŒä¸‹é¢åˆ†åˆ«å¯¹˜q™äº›¾cÕd’Œå¯¹è±¡˜q›è¡Œä»‹ç»ã€?/p>
å›?-3 Prototypeä¸Ajax相关¾cÕd’Œå¯¹è±¡å…³ç³»½Cºæ„å›?/p>
Ajax对象为其他的Ajax功能¾cÀL供了最基本的支æŒï¼Œå®ƒçš„实现å¦?.2.7节ä¸ä¾?-10所½Cºï¼Œå…¶ä¸åŒ…括一个方法getTransport和一个属性activeRequestCount。getTransportæ–ÒŽ³•˜q”回一个XMLHttpRequest对象åQŒactiveRequestCount属性代表æ£åœ¨å¤„ç†ä¸çš„Ajaxè¯äh±‚的个数ã€?/p>
Ajax.Base¾cÀL˜¯Ajax.Request¾cÕd’ŒAjax.PeriodicalUpdater¾cÈš„基类。它æä¾›äº?个方法:
l setOptionsåQšè®¾¾|®Ajaxæ“作所使用的选项ã€?/p>
l responseIsSuccessåQšåˆ¤æ–Ajaxæ“ä½œæ˜¯å¦æˆåŠŸã€?/p>
l responseIsFailureåQšåˆ¤æ–Ajaxæ“作是å¦å¤ÞpÓ|åQˆä¸ŽresponseIsSuccess相ååQ‰ã€?/p>
Ajax.Base¾cÈš„主è¦ä½œç”¨æ˜¯æå–出一些公用的æ–ÒŽ³•åQŒå…¶ä»–类通过¾l§æ‰¿çš„æ–¹å¼ä‹É用这些方法,实现代ç å¤ç”¨ã€?/p>
˜q™æ˜¯Prototype䏿œ€¾l常使用的一个Ajax相关¾c…R€‚Ajax.Request¾cÈš„æ–ÒŽ³•通常是内部ä‹É用的åQŒå› æ¤è¿™é‡Œå°±ä¸ä¸€ä¸€åˆ—ä‹DåQŒæœ‰å…´è¶£çš„读者å¯ä»¥å‚考Prototypeçš„æºä»£ç 。这里é‡ç‚¹è®²è®²å¦‚何ä‹É用Ajax.Request¾c»ï¼Œé¦–å…ˆ¾l™å‡ºä¸€ä¸ªæœ€½Ž€å•çš„Ajax.Request¾cÈš„应用½CÞZ¾‹åQŒå¦‚ä¾?-11所½Cºï¼Œæ³¨æ„½CÞZ¾‹ä¸çš„黑体å—ã€?/p>
ä¾?-11 Ajax.Request¾cÕdº”用示ä¾?/p>
Ajax.Request‹¹‹è¯•™åµé¢åQ?/strong>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>chapter 3</title>
<script type="text/javascript" language="javascript"
src="prototype.js" ></script>
<script type="text/javascript" language="javascript">
function test() {
// 创å¾Ajax.Request对象åQŒå‘起一个Ajaxè¯äh±‚
var myAjax = new Ajax.Request(
'data.html', // è¯äh±‚çš„URL
{
method: 'get', // 使用GETæ–¹å¼å‘é€HTTPè¯äh±‚
onComplete: showResponse // 指定è¯äh±‚æˆåŠŸå®Œæˆæ—‰™œ€è¦æ‰§è¡Œçš„æ–ÒŽ³•
}
);
}
function showResponse(response) {
$('divResult').innerHTML = response.responseText;
}
</script>
</head>
<body>
<input type="button" value="click" onclick="test()" />
<div id="divResult" />
</body>
</html>
data.htmlåQ?/strong>
<input type="text" id="name" />
<input type="button" value="Click Me" onclick="sayHi()">
Ajax.Request对象在åˆå§‹åŒ–æ—‰™œ€è¦æä¾›ä¸¤ä¸ªå‚敎ͼš½W?ä¸ªå‚æ•°æ˜¯ž®†è¦è¯äh±‚™åµé¢çš„URLåQŒè¿™é‡Œä‹É用的data.html是一个普通的HTML陿€é¡µé¢ï¼›½W?ä¸ªå‚æ•°æ˜¯Ajaxæ“作的选项åQŒåœ¨Prototypeä¸åƈ没有专门为Ajaxæ“作选项定义一个类åQŒé€šå¸¸éƒ½æ˜¯åƒä¾‹2-11˜q™æ ·åQŒé€šè¿‡åŒ¿å对象的方å¼è®¾¾|®Ajaxæ“ä½œçš„å‚æ•°ã€‚在ä¾?-11ä¸ï¼ŒAjaxæ“作选项å…ähœ‰ä¸¤ä¸ªå±žæ€§ï¼šmethod表示HTTPè¯äh±‚æ–¹å¼åQŒé»˜è®¤æ˜¯POSTæ–¹å¼åQ›onComplete指定了Ajaxæ“作完æˆä»¥åŽåQˆå³XMLHttpRequest对象的statuså±žæ€§äØ“4æ—Óž¼‰åQŒé¡µé¢å°†è¦æ‰§è¡Œçš„函数。当ç„Óž¼ŒAjaxæ“作˜q˜åŒ…括很多其他选项åQŒå¦‚è¡?-1所½Cºã€?/p>
è¡?-1 Ajaxæ“作选项属性å«ä¹?/p>
属性å¿U?/p> |
å«ä¹‰ |
method |
HTTPè¯äh±‚æ–¹å¼åQˆPOST/GET/HEADåQ‰ã€?/p> |
parameters |
在HTTPè¯äh±‚ä¸ä¼ 入的URLæ ¼å¼çš„值列表,å³URL串ä¸é—®å·ä¹‹åŽçš„部分ã€?/p> |
asynchronous |
是å¦åšå¼‚æ¥XMLHttpRequestè¯äh±‚ã€?/p> |
postBody |
在POSTè¯äh±‚æ–¹å¼ä¸‹ï¼Œä¼ å…¥è¯äh±‚体ä¸çš„内å®V€?/p> |
requestHeaders |
和请求一赯‚¢«ä¼ 入的HTTP头部列表åQŒè¿™ä¸ªåˆ—表必™åÕd«æœ‰å¶æ•îC¸ª™å¹ç›®åQŒå› ä¸ºåˆ—è¡¨ä¸æ¯ä¸¤™å¹äؓ一¾l„,分别代表自定义部分的å称和与之对应的å—符串倹{€?/p> |
onXXXXXXXX |
在HTTPè¯äh±‚ã€å“应的˜q‡ç¨‹ä¸ï¼Œå½“XMLHttpRequest对象状æ€å‘生å˜åŒ–时调用的å“应函数。å“应函数有5个:onUninitializedã€onLoadingã€onLoadedã€onInteractiveå’ŒonCompleteã€‚ä¼ å…¥è¿™äº›å‡½æ•°çš„å‚æ•°å¯ä»¥æœ?个,其丽W?ä¸ªå‚æ•°æ˜¯æ‰§è¡ŒHTTPè¯äh±‚çš„XMLHttpRequest对象åQŒç¬¬2ä¸ªå‚æ•°æ˜¯åŒ…å«è¢«æ‰§è¡Œçš„X-JSONå“应的HTTP头ã€?/p> |
onSuccess |
Ajaxæ“作æˆåŠŸå®Œæˆæ—¶è°ƒç”¨çš„å“应函数åQŒä¼ å…¥çš„å‚æ•°ä¸ŽonXXXXXXXX相åŒã€?/p> |
onFailure |
Ajaxæ“作è¯äh±‚完æˆä½†å‡ºçŽ°é”™è¯¯æ—¶è°ƒç”¨çš„å“应函敎ͼŒä¼ å…¥çš„å‚æ•îC¸ŽonXXXXXXXX相åŒã€?/p> |
onException |
Ajaxæ“作å‘生异常情况时调用的å“应函数åQŒå®ƒå¯ä»¥æŽ¥æ”¶2ä¸ªå‚æ•ŽÍ¼Œå…¶ä¸½W?ä¸ªå‚æ•°æ˜¯æ‰§è¡ŒHTTPè¯äh±‚çš„XMLHttpRequest对象åQŒç¬¬2ä¸ªå‚æ•°æ˜¯å¼‚常对象ã€?/p> |
ä¾?-11使用Ajax.Request¾cÕd®žçŽîCº†™åµé¢çš„局部刷新效果,而这æ ïL±»ä¼¼çš„功能在Ajaxåº”ç”¨ä¸æ˜¯¾lå¸¸ä½¿ç”¨çš„ã€‚å› æ¤ï¼Œä¸ÞZº†½Ž€åŒ–è¿™¿U工作,Prototype框架从Ajax.Requet¾cÖM¸‹z„¡”Ÿå‡ÞZ¸€ä¸ªå¾c Z€”—Ajax.Updater。与Ajax.Request相比åQŒAjax.Updaterçš„åˆå§‹åŒ–多了一个container傿•°åQŒè¯¥å‚数代表ž®†è¦æ›´æ–°çš„页é¢å…ƒç´ çš„id。例2-11的功能通过Ajax.Updater的实玎ͼŒä¼šå˜å¾—æ›´åŠ ç®€å•,如例2-12所½Cºã€?/p>
ä¾?-12 Ajax.Updater¾cÈš„应用½CÞZ¾‹
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>chapter 3</title>
<script type="text/javascript" language="javascript"
src="prototype.js" ></script>
<script type="text/javascript" language="javascript">
function test() {
var myAjax = new Ajax.Updater(
'divResult', // 更新的页é¢å…ƒç´?/strong>
'data.html', // è¯äh±‚çš„URL
{
method: 'get'
}
);
}
</script>
</head>
<body>
<input type="button" value="click" onclick="test()" />
<div id="divResult" />
</body>
</html>
æ¤å¤–åQŒAjax.Updater¾c»è¿˜æœ‰å¦å¤–一个功能,如果è¯äh±‚的页é¢å†…容ä¸åŒ…括JavaScript脚本åQŒAjax.Updater¾cÕd¯ä»¥æ‰§è¡Œå…¶ä¸çš„脚本åQŒåªéœ€è¦åœ¨Ajaxæ“作选项ä¸å¢žåŠ å±žæ€?#8220;evalScripts: true”å›_¯ã€‚对ä¾?-11ä¸çš„data.html˜q›è¡Œä¿®æ”¹åQŒåœ¨å…¶ä¸åŠ å…¥JavaScript脚本åQŒå¦‚ä¾?-13所½Cºã€?/p>
ä¾?-13 data.html
<script language="javascript" type="text/javascript">
sayHi = function() {
alert("Hello, " + $F('name') + "!");
}
</script>
<input type="text" id="name" />
<input type="button" value="Click Me" onclick="sayHi()">
调用Ajax.Updater的JavaScript脚本修改为:
function test() {
var myAjax = new Ajax.Updater(
'divResult', // 更新的页é¢å…ƒç´?/p>
'data.html', // è¯äh±‚çš„URL
{
method: 'get',
evalScripts: true
}
);
}
˜q™æ ·ž®±å¯ä»¥ä‹É用data.html™åµé¢çš„内å®ÒŽ›´æ–°å½“å‰é¡µé¢ä¸çš?lt;div>å…ƒç´ divResultåQŒåƈ且执行data.html™åµé¢ä¸åŒ…å«çš„JavaScript脚本ã€?/p>
˜q™é‡Œéœ€è¦æ³¨æ„的是例2-13ä¸sayHi函数的写法,如果写æˆ
function sayHi() {
alert("Hello, " + $F('name') + "!");
}
或�/p>
var sayHi = function() {
alert("Hello, " + $F('name') + "!");
}
½E‹åºæ˜¯ä¸èƒ½æ£å¸¸è¿è¡Œçš„ã€‚è¿™æ˜¯å› ä¸ºAjax.Updater执行脚本是通过eval的方å¼ï¼Œè€Œä¸æ˜¯å°†è„šæœ¬å†…å®¹å¼•å…¥åˆ°å½“å‰é¡µé¢ï¼Œç›´æŽ¥å£°æ˜Žçš„function sayHi或者用var声明的sayHi函数åQŒå…¶ä½œç”¨åŸŸåªæ˜¯åœ¨˜q™æ®µè„šæœ¬å†…éƒ¨åQŒå¤–部的其他脚本ä¸èƒ½è®‰K—®sayHi函数。而按照例2-13的方å¼å£°æ˜Žçš„函数åQŒå…¶ä½œç”¨åŸŸæ˜¯æ•´ä¸ªwindowã€?/p>
å’ŒAjax.Request¾cÈ›¸ä¼û|¼ŒAjax.PeriodicalUpdater¾cÖM¹Ÿ¾l§æ‰¿è‡ªAjax.Base¾c…R€‚在一些Ajax应用ä¸ï¼Œéœ€è¦å‘¨æœŸæ€§åœ°æ›´æ–°æŸäº›™åµé¢å…ƒç´ åQŒä¾‹å¦‚天气预报ã€å³æ—¶æ–°é—ȉ½{‰ã€‚实现这æ ïLš„功能通常è¦ä‹É用JavaScriptä¸çš„定时器函数setTimeoutã€clearTimeout½{‰ï¼Œè€Œæœ‰äº†Ajax.PeriodicalUpdater¾cÕd¯ä»¥å¾ˆå¥½åœ°½Ž€åŒ–è¿™¾cȼ–ç 工作ã€?/p>
æ–°å¾ä¸€ä¸ªAjax. PeriodicalUpdater¾cÈš„å®žä¾‹éœ€è¦æŒ‡å®?ä¸ªå‚æ•ŽÍ¼š
l containeråQšå°†è¦æ›´æ–°çš„™åµé¢å…ƒç´ idåQ?/p>
l urlåQšè¯·æ±‚çš„URL地å€åQ?/p>
l optionsåQšAjaxæ“作选项ã€?/p>
å’ŒAjax.Updater¾cÈ›¸ä¼û|¼ŒAjax.PeriodicalUpdater¾cÖM¹Ÿæ”¯æŒåŠ¨æ€æ‰§è¡ŒJavaScript脚本åQŒåªéœ€åœ¨Ajaxæ“作选项ä¸å¢žåŠ ï¼ˆevalScripts: trueåQ‰å±žæ€§å€¼å³å¯ã€?/p>
Ajax.PeriodicalUpdater¾cÀL”¯æŒä¸¤ä¸ªç‰¹ŒDŠçš„Ajaxæ“作选项åQšfrequencyå’Œdecay。frequency傿•°å¾ˆå®¹æ˜“ç†è§£ï¼Œæ—¢ç„¶æ˜¯å®šæ—¶æ›´æ–°é¡µé¢å…ƒç´ ,或者定时执行脚本,那么多长旉™—´æ›´æ–°æˆ–者执行一‹Æ¡å‘¢åQŸfrequency指的ž®±æ˜¯ä¸¤æ¬¡Ajaxæ“作之间的时间间隔,å•使˜¯ç§’åQŒé»˜è®¤å€égØ“2¿U’ã€?/p>
如果仅指定frequency傿•°åQŒç¨‹åºä¼šæŒ‰ç…§å›ºå®šçš„æ—¶é—´é—´é𔿉§è¡ŒAjaxæ“作。这æ ïLš„æ›´æ–°½{–ç•¥åˆç†å—?½{”案å–决于请求URL䏿•°æ®çš„æ›´æ–°é¢‘率。如果请求的数æ®ä¼šå¾ˆæœ‰è§„律地按照固定频率改å˜åQŒé‚£ä¹ˆåªè¦è®¾¾|®ä¸€ä¸ªåˆé€‚çš„frequencyå€û|¼Œž®±å¯ä»¥å¾ˆæœ‰æ•ˆåœ°å®žçް页é¢çš„定时更新。然而实际应用ä¸çš„æ•°æ®å¾€å¾€ä¸ä¼šé‚£ä¹ˆç†æƒ³åQŒä¾‹å¦‚新闻,å¯èƒ½åœ¨ä¸€å¤©ä¸åªæœ‰ç‰¹å®šçš„一ŒD‰|—¶é—´æ›´æ–°é¢‘率会很高åQŒè€Œåœ¨å…¶ä»–æ—‰™—´åˆ™å‡ 乎没有å˜åŒ–。ç»å¸”R‡åˆ°è¿™æ ïLš„æƒ…况该怎么办呢åQŸAjax.PeriodicalUpdater¾cÀL”¯æŒçš„decayå±žæ€§å°±æ˜¯äØ“äº†è§£å†Œ™¿™ä¸ªé—®é¢˜è€Œäñ”生的。当optionä¸å¸¦æœ‰decay属性时åQŒå¦‚果请求返回的数æ®ä¸Žä¸Š‹Æ¡ç›¸åŒï¼Œé‚£ä¹ˆä¸‹æ¬¡˜q›è¡ŒAjaxæ“作的时间间隔会乘以一个decay的系数ã€?/p>
ä¸ÞZº†æ¯”较明显地看到decay属性的效果åQŒåœ¨è¯äh±‚的测试页é¢ä¸åŠ å…¥è®°å½•æ—‰™—´çš„脚本,代ç 如例2-14所½Cºã€?/p>
ä¾?-14 Ajax.PeriodicalUpdater¾cÕdº”用示ä¾?/p>
ex10.htmlåQ?/strong>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>chapter 3</title>
<script type="text/javascript" language="javascript"
src="prototype.js" ></script>
<script type="text/javascript" language="javascript">
var str='';
var intcount=0;
function test() {
var myAjax = new Ajax.PeriodicalUpdater(
'divResult', // 定时更新的页é¢å…ƒç´?/p>
'script1.html', // è¯äh±‚çš„URL
{
method: 'get', // HTTPè¯äh±‚的方å¼äØ“GET
evalScripts: true, // æ˜¯å¦æ‰§è¡Œè¯äh±‚™åµé¢ä¸çš„脚本
frequency: 1, // 更新的频�/p>
decay: 1 // 衰凾pÀL•°
}
);
}
</script>
</head>
<body>
<input type="button" value="click" onclick="test()" />
<div id="divResult" ></div>
<div id="divResult2" ></div>
</body>
</html>
script1.html:
<script language="javascript" type="text/javascript">
// Ajax.PeriodicalUpdater调用函数计数
// åœ?lt;div>å…ƒç´ divResult2ä¸å¢žåŠ ä¸€è¡Œç»“æžœï¼Œòq¶è®°å½•当剿—¶é—´å’Œ
// Ajax.PeriodicalUpdater的调用次�/p>
intcount++;
str = $('divResult2').innerHTML;
$('divResult2').innerHTML = str + "count = " + intcount+ ": " + new Date() + "<br>";
</script>
ä¾?-14çš„è¿è¡Œç»“果如å›?-4所½Cºã€?/p>
å›?-4 Ajax.PeriodicalUpdater¾cÕdº”用示ä¾?/p>
å¯ä»¥çœ‹åˆ°åQŒç”±äºŽè¯·æ±‚返回的数æ®ä¸€ç›´æ²¡æœ‰å‘生å˜åŒ–ï¼Œæ¯æ¬¡è¯äh±‚æ—‰™—´çš„间隔是上一‹Æ¡çš„2å€ï¼ˆdecay=2åQ‰ã€‚如果æŸä¸€‹Æ¡è¯·æ±‚返回的数æ®å‘生了å˜åŒ–,那么执行è¯äh±‚的时间间隔则æ¢å¤åˆ°åˆå§‹å€¹{€?/p>
Ajax.Responders对象¾l´æŠ¤äº†ä¸€ä¸ªæ£åœ¨è¿è¡Œçš„Ajax对象列表åQŒåœ¨éœ€è¦å®žçŽîC¸€äº›å…¨å±€çš„功能时ž®±å¯ä»¥ä‹É用它。例如,在Ajaxè¯äh±‚å‘出以åŽéœ€è¦æ½Cºç”¨æˆäh“作æ£åœ¨æ‰§è¡Œä¸åQŒè€Œæ“作返回以åŽåˆ™å–消æç¤ºã€‚利用Ajax.Responders对象ž®±å¯ä»¥å®žçŽ°è¿™æ ïLš„功能åQŒå¦‚ä¾?-15所½Cºã€?/p>
ä¾?-15 Ajax.Responders对象应用½CÞZ¾‹
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>chapter 3</title>
<script type="text/javascript" language="javascript"
src="prototype.js" ></script>
<script type="text/javascript" language="javascript">
function test() {
var myAjax = new Ajax.Request(
'data.html',
{
method: 'get',
onComplete: showResponse
}
);
}
function showResponse(response) {
$('divResult').innerHTML = response.responseText;
}
var handle = {
onCreate: function() {
Element.show('loading'); // 当创建Ajaxè¯äh±‚æ—Óž¼Œæ˜„¡¤ºloading
},
onComplete: function() {
// 当请求æˆåŠŸè¿”å›žæ—¶åQŒå¦‚æžœå½“å‰æ²¡æœ‰å…¶ä»–æ£åœ¨è¿è¡Œä¸çš„Ajaxè¯äh±‚åQŒéšè—loading
if (Ajax.activeRequestCount == 0) {
Element.hide('loading');
}
}
};
// ž®†handle注册到全局的Ajax.Responders对象ä¸ï¼Œä½¿å…¶ç”Ÿæ•ˆ
Ajax.Responders.register(handle);
</script>
</head>
<body>
<input type="button" value="click" onclick="test()" />
<div id="divResult" ></div>
<div id='loading' style="display:none">
<img src="loading.gif">Loading...
</div>
</body>
</html>
ä¾?-15ä¸å®šä¹‰äº†ä¸€ä¸ªhandle对象åQŒå…¶ä¸åŒ…å«onCreateå’ŒonComplete函数。页é¢ä¸å‘出ä»ÖM½•一个Ajaxè¯äh±‚æ—‰™ƒ½ä¼šè°ƒç”¨onCreateæ–ÒŽ³•åQŒè€Œè¯·æ±‚å®Œæˆæ—¶éƒ½ä¼šè°ƒç”¨onCompleteæ–ÒŽ³•。例2-15çš„è¿è¡Œç»“果如å›?-5所½Cºã€?br />