javascript中實現(xiàn)這個功能的是來自BOM的一 " /> 九九久久国产,午夜视频在线观看免费观看在线观看 ,一个人看的视频免费高清在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

javascript異步編程

就好像排隊,前面的人忙著忙著突然上廁所了,后面的人阻塞在這里,因此我們就需要讓前面的人死到一邊去,讓后面的人跟進……AJAX就是這個概念,請求還在繼續(xù),但我們還可以做其他事。

Javascript中實現(xiàn)這個功能的是來自BOM的一個函數(shù)setTimeout,但相關(guān)的DOM操作也提供了一系列實現(xiàn)。如XMLHttpRequest對象與script標簽的onreadystatechange回調(diào),image的onload與onerror回調(diào),iframe的onload,DOM元素的事件回調(diào),HTML5的跨域消息傳送postMessage,QuickTime與flash對象的加載……

setTimeout的零秒延遲在前些年時間被國內(nèi)宣揚得特別厲害,但setTimeout是所有延遲中最慢的,最少要花上10多毫秒,如果用setTimeout來開發(fā)特效,這特效會運行得比較慢。下面是一個性能測試:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
Chromium Safari FirefoxOpera 10.10 Opera 10.50
setTimeout 4.32ms 10.201ms 10.302ms 10.38ms 9.876ms
img.onerror 0.199ms 0.678ms 0.201ms 0.058ms 0.575ms
script.onreadystatechangefailfail fail fail fail
script.onload0.414ms 0.138ms 0.414ms fail fail
xhr.onreadystatechangefail0.622ms fail 0.078ms 0.079ms
self.postMessage0.096ms 0.123ms 0.112ms 0.049ms 0.094ms

為了處理這種異步調(diào)用,Mochikit從Python的Twisted框架借來了Deferred這個類,并用它來處理AJAX的回調(diào)。AJAX的回調(diào)通常有兩種,成功加載時的回調(diào)與請求失敗的回調(diào),IE8的XDomainRequest就有這兩種回調(diào)了,標準瀏覽器的script與image也有這兩種回調(diào),分別稱之為onload與onerror。Mochikit的Deferred實例就內(nèi)置一個數(shù)組,每次包含這兩種回調(diào),依次執(zhí)行。Mochikit這偉大的遺產(chǎn)后來由dojo發(fā)揚光大了,至于怎么用,自己google吧。

下面是我的框架對它的應(yīng)用,我已把它整合到我的框架中:
復(fù)制代碼 代碼如下:
<!doctype html>
<html>
<head>
<title>異步操作例子 by 司徒正美</title>
<meta charset="utf-8"/>
<meta content="IE=8" http-equiv="X-UA-Compatible"/>
<meta name="keywords" content="異步操作例子 by 司徒正美" />
<meta name="description" content="異步操作例子 by 司徒正美" />
<%= Javascript_include_tag "dom.js" %>
<%= Javascript_tag "window._token = '#{form_authenticity_token}'" if ActionController::Base.allow_forgery_protection %>
<script type="text/Javascript" charset="utf-8">
dom.ready(function(){
dom.require("ajax");
dom.ajax({method:"post",
async:true,
dataType:"text",
data:{authenticity_token:window._token}
}).next(function(a){
alert(a)
});
dom.jsonp({url:"http://del.icio.us/feeds/json/fans/stomita"}).next(function(json){
alert(json)
}).error(function(e){
alert(e)
});
});
</script>
</head>
<body>
</body>
</html>

后臺:
復(fù)制代碼 代碼如下:
class HomeController < ApplicationController
def index
if request.xhr?
name = params[:name]
puts "-------------"
render :text => "<p>The time is <b>" + DateTime.now.to_s + "</b></p>"
end
end
end

在日本一博客提到這樣一個捕捉異步錯誤的例子:
復(fù)制代碼 代碼如下:
function throwError(){
throw new Error('ERROR');
}
try{
setTimeout(throwError, 3000);
} catch(e){
alert(e);
}

看來try...catch是無法捕捉這種形式的錯誤,window.onerror可以,但好像只有IE與FF支持。如果用Deferred來處理,就簡單了!
復(fù)制代碼 代碼如下:
dom.Deferred.next(function () {
throw new Error("錯誤")
}).wait(1).error(function(e){
alert(e instanceof Error)
});

列隊處理。由于是使用了異步,因此不會阻塞頁面的演染。
復(fù)制代碼 代碼如下:
<!doctype html>
<html>
<head>
<title>異步操作例子 by 司徒正美</title>
<meta charset="utf-8"/>
<meta content="IE=8" http-equiv="X-UA-Compatible"/>
<meta name="keywords" content="異步操作例子 by 司徒正美" />
<meta name="description" content="異步操作例子 by 司徒正美" />
<%= Javascript_include_tag "dom.js" %>
<script type="text/Javascript" charset="utf-8">
dom.require("deferred");
dom.require("query");
dom.ready(function(){
var a = dom("#aaa")[0];
dom.Deferred.loop(10,function(i){
a.innerHTML += i+"<br/>"
});
dom.Deferred.loop(10,function(i){
a.innerHTML += String.fromCharCode(i+97)+"<br/>"
});
dom.Deferred.loop(10,function(i){
a.innerHTML += "司徒正美"+i+"<br/>"
});
});
/*結(jié)果
0
a
司徒正美0
1

司徒正美1
2
c
司徒正美2
3
d
司徒正美3
4
e
司徒正美4
5
f
司徒正美5
6
g
司徒正美6
7
h
司徒正美7
8
i
司徒正美8
9
j
司徒正美9
*/
</script>
</head>
<body>
<div id="aaa"></div>
</body>
</html>

JavaScript技術(shù)javascript異步編程,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 2021天天躁夜夜躁西西 | 久久国产加勒比精品无码 | 永久免费aavv视频播放 | 999免费视频 | 国产精品99久久 | 国产成人一区二区三区影院免费 | 成年人小视频在线观看 | 国产区精品福利在线观看精品 | 国产91久久精品一区二区 | 思思久热re6这里有精品 | 欧美人善zozσ性伦交 | 亚洲一区二区三区免费视频 | 精品一区二区三区四区五区六区 | 牛牛影视精品一区二区在线看 | 亚洲国产一区二区三区最新 | 免费一区二区三区四区 | 欧美美女被日 | 国产白白视频在线观看2 | 91精品啪在线观看国产91九色 | 天天干天天干天天干 | 亚洲一区免费看 | 国产精品被窝福利一区 | 婷婷激情网站 | 高清一区二区三区免费 | xxxxx亚洲| 亚洲乱码一二三四区乱码 | haodiaocao这里只有精品一 | 久久七国产精品 | 国内精品线在线观看 | 加勒比精品| 91成人午夜精品福利院在线观看 | 韩国美女一区二区 | 精品日本久久久久久久久久 | 91久久精品一区二区三区 | 久久亚洲国产成人精品性色 | 婷婷六月丁 | 午夜国产高清精品一区免费 | 国产精品人人爱一区二区白浆 | 亚洲精品中文字幕午夜 | 久久久综合网 | 91成人午夜精品福利院在线观看 |