久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Ajax 簡(jiǎn)介+實(shí)例 - namelysweet的博客 - 和訊博客

 shaibiao 2006-12-27
1.AJAX簡(jiǎn)介:
Ajax是Asynchronous javascript and XML的縮寫,。Ajax是幾項(xiàng)技術(shù)按一定的方式組合在一在同共的協(xié)作中發(fā)揮各自的作用,它包括
  使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn);
  使用DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;
  使用XML和XSLT進(jìn)行數(shù)據(jù)交換與處理;
  使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)讀取;
  最后用javascript綁定和處理所有數(shù)據(jù);
Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請(qǐng)求都提交給服務(wù)器,像—些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎自己來(lái)做,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)再由Ajax引擎代為向服務(wù)器提交請(qǐng)求,。



核心只有javascript,、XMLHTTPRequest和DOM,如果所用數(shù)據(jù)格式為XML的話,,還可以再加上XML這一項(xiàng)(Ajax從服務(wù)器端返回的數(shù)據(jù)可以是XML格式,,也可以是文本等其他格式)。


2.使用Ajax
1,、判斷瀏覽器來(lái)使用不同的函數(shù)


>> CODE

1 //處理瀏覽器,,用來(lái)選擇不同的XML讀取函數(shù) 2 var agt = navigator.userAgent.toLowerCase(); 3 var is_opera = (agt.indexOf("opera") != -1); 4 var is_ie = (agt.indexOf("msie") != -1) && document.all && !is_opera; 5 var is_ie5 = (agt.indexOf("msie 5") != -1) && document.all;

2、創(chuàng)建請(qǐng)求(GET和POST)
1 //創(chuàng)建Get請(qǐng)求 2 function StartGETRequest(url, handler) 3 { 4 xmlhttp = null; 5 if (is_ie) { 6 var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"; 7 try { 8 xmlhttp = new ActiveXObject(control); 9 } catch(e) { 10 alert("You need to enable active scripting and activeX controls"); 11 DumpException(e); 12 } 13 } else { 14 xmlhttp = new XMLHttpRequest(); 15 } 16 xmlhttp.onreadystatechange = function() {handler();} 17 if (url.indexOf("?") != -1){ 18 var urltemp = url + "&rand=" + UniqueNum(); 19 } else { 20 var urltemp = url + "?rand=" + UniqueNum(); 21 } 22 xmlhttp.open(‘GET‘, urltemp, true); 23 xmlhttp.send(null); 24 } 25 26 //創(chuàng)建POST請(qǐng)求 27 function StartPOSTRequest(url, data, handler) 28 { 29 xmlhttp = null; 30 if (is_ie) { 31 var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"; 32 try { 33 xmlhttp = new ActiveXObject(control); 34 } catch(e) { 35 alert("You need to enable active scripting and activeX controls"); 36 DumpException(e); 37 } 38 } else { 39 xmlhttp = new XMLHttpRequest(); 40 } 41 xmlhttp.onreadystatechange = function() {handler();} 42 xmlhttp.open(‘POST‘, url, true); 43 if (typeof(xmlhttp.setRequestHeader) != "undefined") { 44 xmlhttp.setRequestHeader(‘Content-Type‘, ‘a(chǎn)pplication/x-www-form-urlencoded; Charset=GB2312‘); 45 } 46 xmlhttp.send(data); 47 }


3,、接受返回的數(shù)據(jù)并進(jìn)行顯示

>> CODE
1 2 function getCommentHtmlList(qid, aid) 3 { 4 var strText; 5 if (xmlhttp.readyState == 4){ 6 if (xmlhttp.status == 200){ 7 strText = xmlhttp.responseText;//接受文本數(shù)據(jù) 8 strText = xmlhttp.responseXml;//接受Xml數(shù)據(jù) 9 document.getElementById("commentsec").innerHTML = strText; //顯示數(shù)據(jù) 10 }else{ 11 //Alert(“網(wǎng)絡(luò)錯(cuò)誤,!”); 12 alert("Problem: " + xmlhttp.statusText); 13 } 14 } 15 } 16


至此一個(gè)流程完畢

4、重要函數(shù)應(yīng)用解釋

XMLHttpRequest
最早應(yīng)用XMLHTTP的是微軟,IE(IE5以上)通過(guò)允許開發(fā)人員在Web頁(yè)面內(nèi)部使用XMLHTTP ActiveX組件擴(kuò)展自身的功能,開發(fā)人員可以不用從當(dāng)前的Web頁(yè)面導(dǎo)航而直接傳輸數(shù)據(jù)到服務(wù)器上或者從服務(wù)器取數(shù)據(jù),。這個(gè)功能是很重要的,因?yàn)樗鼛椭鷾p少了無(wú)狀態(tài)連接的痛苦,它還可以排除下載冗余HTML的需要,從而提高進(jìn)程的速度,。Mozilla(Mozilla1.0以上及NetScape7以上)做出的回應(yīng)是創(chuàng)建它自己的繼承XML代理類:XMLHttpRequest類。Konqueror (和Safari v1.2,同樣也是基于KHTML的瀏覽器)也支持XMLHttpRequest對(duì)象,而Opera也將在其v7.6x+以后的版本中支持XMLHttpRequest對(duì)象,。對(duì)于大多數(shù)情況,,XMLHttpRequest對(duì)象和XMLHTTP組件很相似,方法和屬性也類似,只是有一小部分屬性不支持。
XMLHttpRequest 對(duì)象方法 方法 描述
abort() 停止當(dāng)前請(qǐng)求
getAllResponseHeaders() 作為字符串返問(wèn)完整的headers
getResponseHeader("headerLabel") 作為字符串返問(wèn)單個(gè)的header標(biāo)簽
open("method","URL"[,asyncFlag[,"userName"[, "password"]]]) 設(shè)置未決的請(qǐng)求的目標(biāo) URL, 方法, 和其他參數(shù)
send(content) 發(fā)送請(qǐng)求
setRequestHeader("label", "value") 設(shè)置header并和請(qǐng)求一起發(fā)送

onreadystatechange 狀態(tài)改變的事件觸發(fā)器
readyState 對(duì)象狀態(tài)(integer):
0 = 未初始化
1 = 讀取中
2 = 已讀取
3 = 交互中
4 = 完成

responseText 服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的文本版本
responseXML 服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的兼容DOM的XML文檔對(duì)象
status 服務(wù)器返回的狀態(tài)碼, 如:404 = "文件末找到" ,、200 ="成功"
statusText 服務(wù)器返回的狀態(tài)文本信息

3.AJAX的好處:
1,、減輕服務(wù)器的負(fù)擔(dān),減少帶寬消耗
因?yàn)锳jax的根本理念是“按需取數(shù)據(jù)”,,所以最大可能在減少了冗余請(qǐng)求和響影對(duì)服務(wù)器造成的負(fù)擔(dān),;也可以把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來(lái)處理,,減輕服務(wù)器和帶寬的負(fù)擔(dān),,節(jié)約空間和帶寬租用成本;

2,、無(wú)刷新更新頁(yè)面,,減少用戶實(shí)際和心理等待時(shí)間;
  首先,,“按需取數(shù)據(jù)”的模式減少了數(shù)據(jù)的實(shí)際讀取量,。
  其次,即使要讀取比較大的數(shù)據(jù),,也不用像RELOAD一樣出現(xiàn)白屏的情況,,由于Ajax是用XMLHTTP發(fā)送請(qǐng)求得到服務(wù)端應(yīng)答數(shù)據(jù),,在不重新載入整個(gè)頁(yè)面的情況下用javascript操作DOM最終更新頁(yè)面的,所以在讀取數(shù)據(jù)的過(guò)程中,,用戶所面對(duì)的也不是白屏,,而是原來(lái)的頁(yè)面狀態(tài)(或者可以加一個(gè)LOADING的提示框讓用戶了解數(shù)據(jù)讀取的狀態(tài)),只有當(dāng)接收到全部數(shù)據(jù)后才更新相應(yīng)部分的內(nèi)容,,而這種更新也是瞬間的,,用戶幾乎感覺(jué)不到。

3,、基于標(biāo)準(zhǔn)化并被廣泛支持,,不需要插件或下載小程序;
實(shí)際驗(yàn)證,,目前支持的瀏覽器是IE5以上,,Opera(對(duì)post處理有點(diǎn)問(wèn)題),Mozilla Firefox等,。并且在加載的時(shí)候不會(huì)提示用戶需要下載程序,,減少用戶的反感。

4,、Ajax使WEB中的界面與應(yīng)用分離(也可以說(shuō)是數(shù)據(jù)與呈現(xiàn)分離),;

4.AJAX的問(wèn)題:
1、一些手持設(shè)備(如手機(jī),、PDA等)現(xiàn)在還不能很好的支持Ajax,;
2、用javascript作的Ajax引擎,,javascript的兼容性和DeBug都是讓人頭痛的事;
3,、Ajax的無(wú)刷新重載,,由于頁(yè)面的變化沒(méi)有刷新重載那么明顯,所以容易給用戶帶來(lái)困擾――用戶不太清楚現(xiàn)在的數(shù)據(jù)是新的還是已經(jīng)更新過(guò)的,;現(xiàn)有的解決有:在相關(guān)位置提示,、數(shù)據(jù)更新的區(qū)域設(shè)計(jì)得比較明顯、數(shù)據(jù)更新后給用戶提示等,;
4,、對(duì)流媒體的支持沒(méi)有FLASH、Java Applet好,;


5.使用中遇到的問(wèn)題:
1,、編碼問(wèn)題:
我們的網(wǎng)頁(yè)編碼都是使用的GB2312格式,但是在默認(rèn)的情況下AJAX使用的UTF-8格式的數(shù)據(jù),,這樣就給我們?cè)跀?shù)據(jù)的保存方面造成問(wèn)題,,需要轉(zhuǎn)碼,。
例子:知識(shí)人最終頁(yè)面的評(píng)論交互。
比如php下可以用 mb_convert_encoding("中國(guó)","UTF-8","GB2312") 將漢字轉(zhuǎn)成 UTF-8編碼,,或者(iconv也可)

6.網(wǎng)絡(luò)里面關(guān)于ajax的說(shuō)法
1,、對(duì)搜索引擎的支持不好
2、編寫復(fù)雜,、容易出錯(cuò),,調(diào)試器難找,幾乎沒(méi)有,,只有這個(gè)SplineTech JavaScript HTML Debugger,, 地址:http://www./javascript_debugger/javascript_debugger.asp
3、冗余代碼更多了,,層層包含js文件是AJAX的通病,,再加上以往的很多服務(wù)端代碼現(xiàn)在放到了客戶端,所以每次打開一個(gè)頁(yè)面會(huì)包含很多的無(wú)用的js文件也一同下載下來(lái),。
4,、破壞了Web的原有標(biāo)準(zhǔn),<span onclick="location.href=‘detail/‘;">點(diǎn)擊查看全部</a>,,這個(gè)可以替代A標(biāo)簽,。
5、XML只是用來(lái)打幌子,,xml有一個(gè)致命的缺點(diǎn),,那就是加載的資源耗費(fèi),這好像是所有平臺(tái)下xml的通病,。google map沒(méi)有用xml,,而是用了原生的javascript數(shù)組。
6.同時(shí)要注意緩存的問(wèn)題
>>CODE
1 <script language=javascript> 2 var agt = navigator.userAgent.toLowerCase(); 3 var is_opera = (agt.indexOf("opera") != -1); 4 var is_ie = (agt.indexOf("msie") != -1) && document.all && !is_opera; 5 var is_ie5 = (agt.indexOf("msie 5") != -1) && document.all; 6 7 var thisObj=document.getElementById("TAG_USER_STOCK"); 8 9 10 function StartGETRequest(url,page,tag) 11 { 12 thisObj=document.getElementById(tag); 13 xmlhttp = null; 14 if (is_ie) { 15 var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"; 16 try { 17 xmlhttp = new ActiveXObject(control); 18 } catch(e) { 19 alert("You need to enable active scripting and activeX controls"); 20 DumpException(e); 21 } 22 } else { 23 xmlhttp = new XMLHttpRequest(); 24 } 25 xmlhttp.onreadystatechange = getCommentHtmlList; 26 27 url=url+"?page="+page; 28 29 xmlhttp.open(GET‘, url, true); 30 xmlhttp.send(null); 31 } 32 function getCommentHtmlList() 33 { 34 var strText; 35 if (xmlhttp.readyState == 4){ 36 if (xmlhttp.status == 200){ 37 strText = xmlhttp.responseText;//接受文本數(shù)據(jù) 38 thisObj.innerHTML = strText; //顯示數(shù)據(jù) 39 }else{ 40 alert("Problem: " + xmlhttp.statusText); 41 } 42 } 43 } 44 </script> 45

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多