Ajax總結

Ajax的核心技術是XMLHttpRequest對象,它可以在不向服務器提交整個頁面的情況下,實現局部更新網頁。通過這個對象,Ajax可以像桌面應用程序那樣只與服務器進行數據層的交換,而不必每次都刷新界面,也不必每次將數據處理的工作都交給服務器來做。這樣既減輕了服務器負擔又提高了響應速度,還縮短了用戶的等待時間。通常一個Ajax的實現過程有五步,下面我們以上篇博客中的小實例為例來逐步學習。

1.建立XMLHttpRequest對象。

IE瀏覽器將XMLHttpRequest實現為一個ActiveX對象,其他瀏覽器如Firefox,Opera,Netscape等將其實現為一個本地javascript對象,IE7.0及以上版本這兩種創建方式都支持

 //定義用戶存儲XMLHttpRequest對象的變量var xmlHttp = null;//創建XMLHttpRequest對象function creatXMLHTTP(){//判斷瀏覽器是否支持ActiveX控件,針對IE6及之前版本if (window.ActiveXObject){//將所有可能出現的ActiveXObject版本都放在一個數組中var arrXmlHttpTypes = ['Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];//通過循環創建XMLHttpRequest對象for (var i=0;i<arrXmlHttpTypes.length;i++){try{//創建XMLHttpRequest對象xmlHttp = new ActiveXObject(arrXmlHttpTypes[i]);//如果創建XMLHttpRequest對象成功,則跳出循環break;}catch(ex){//如果創建不成功,則從數組中取出下一個版本繼續創建}}}//判斷瀏覽器是否將XMLHttpRequest作為本地對象實現,針對IE7及以上,Firefox,Opera等瀏覽器else if(window.XMLHttpRequest){xmlHttp = new XMLHttpRequest();}}

  //創建XMLHttpRequest對象,調用前面定義好的函數 
creatXMLHTTP();

        if (xmlHttp!=null){//創建響應XMLHttpRequest對象狀態變化的函數//創建http請求//發送http請求}else{alert("您的瀏覽器不支持XMLHTTP");}</pre>
2.注冊回調函數。
   //創建響應XMLHttpRequest對象狀態變化的函數xmlHttp.onreadystatechange = httpStateChange;
在異步調用時,XMLHttpRequest對象有幾個不同的狀態,這些狀態表示了異步調用的過程。
0:未初始化狀態,剛創建完一個XMLHttpRequest對象;
1:初始化狀態,即XMLHttpRequest對象已經獲得了要將數據發送到哪個服務器上、以什么方式發送等信息;
2:發送狀態,XMLHttpRequest開始發送數據;
3:數據傳送狀態,此時XMLHttpRequest正在接受從服務器端返回的數據,但是數據還沒有傳送完畢;
4:完成狀態:此時XMLHttpRequest對象已經將從服務器端返回的數據接受完畢。
 
 

使用XMLHttpRequest對象的onreadystatechange屬性,可以設置響應XMLHttpRequest對象狀態變化的函數。

設置回調函數時,不要在函數名后而加括號。加括號表示將回調函數的返回值注冊給onreadystatechange屬性。

 

3.使用open方法設置和服務器端交互的基本信息。
 //創建http請求xmlHttp.open("get","userName.txt", true);
XMLHttpRequest的open(method,URL,flag,name,password)方法用來初始化對象,后三個參數是可選的。
method:指定用什么方式向服務器發送http請求,參數值可以是get,post,head,put和delete五種。
URL:指定服務器的URL,也就是用戶處理和返回數據的程序的URL。該URL可以是絕對地址,也可以是相對地址。
flag:指定提交http請求的方式,true指異步方式,為默認值;false指同步方式。
name和password:如果服務器需要驗證,這兩個參數用來提交用戶名和密碼。

4.設置發送的數據,開始和服務器端交互。

  //發送http請求xmlHttp.send(null);

發送http請求使用XMLHttpRequest的send(data)方法,data參數就是傳遞給open()方法中URL參數所指定的文件的參數。若果要傳遞多個參數,用”&”來分隔,不需要傳遞參數寫”null”。


5.在回調函數中判斷交互是否結束,響應是否正確,并根據需要獲取服務器端返回的數據,更新頁面內容。

1)判斷異步調用是否成功:

if (xmlHttp.readyState==4)//異步調用完畢
{if (xmlHttp.status==200 || xmlHttp.status==0)//異步調用成功||在本機上調試{                    }
}
readyState屬性值為4,說明異步調用完成,但并不代表異步調用執行成功。XMLHttpRequest的status屬性可以獲得從服務器返回的狀態碼。0代表不能理解的http狀態,通常只有在本地計算機打開文件時才會返回。比較常用的http狀態碼有以下三個:

200:服務器成功返回網頁。

404:客戶端請求的網頁不存在。

503:服務器響應超時。


2)獲得服務器返回的數據:

<span style="font-family:SimSun;font-size:18px;"><strong> var userNames = xmlHttp.responseText;</strong></span>

異步調用的最終目的是接收從服務器返回的數據,并根據該數據決定如何顯示在客戶端網頁中。異步調用成功后,XMLHttpRequest對象通過使用以下4個屬性來獲得服務器返回的數據。

responseText:表示將服務器返回的數據以字符串形式返回。

responseXML:表示以XML的形式返回。

responseBody:表示以unsigned byte數組的形式返回。

responseStream:表示以IStream對象的形式返回。


3)局部更新:

<span style="font-family:SimSun;font-size:18px;"><strong>//查找用于顯示提示信息的節點
var node = document.getElementById("myDiv");
//更新數據                   
node.firstChild.nodeValue = text;</strong></span>

獲取服務器返回的數據之后就要顯示出來。Ajax通過DOM來完成局部更新數據。

Ajax編程中離不開對XMLHttpRequest對象的使用,每次使用都是做這五步工作。面對重復的事情我們就要想辦法了。由于這項編程步驟比較固定現在已經被封裝好了,從而使代碼重用,簡化編程。但是想要成為一名優秀的程序員,還是有必要了解一下這五個步驟。





本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539442.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringMVC訪問靜態資源的三種方式

如何你的DispatcherServlet攔截 *.do這樣的URL&#xff0c;就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截“/”&#xff0c;攔截了所有的請求&#xff0c;同時對*.js,*.jpg的訪問也就被攔截了。 目的&#xff1a;可以正常訪問靜態文件&#xff0c;不要找不到…

電腦如何進入bios模式_華碩筆記本電腦開機自動進入BIOS界面怎么辦?

最近很多人的華碩牌子筆記本有問題&#xff0c;說自己開機就直接進入BIOS了。對于這些小白來說&#xff0c;一臉懵逼啊&#xff0c;不知道怎么解決&#xff0c;其實大家也不要著急&#xff0c;堅哥來簡單幫大家分析一下。第一、可能系統的文件被更改&#xff0c;從而導致無法啟…

springmvc在controller和視圖之間傳遞參數

從視圖向controller傳遞值&#xff0c; controller <--- 視圖 1&#xff09;簡單類型&#xff0c;如int, String, 應在變量名前加RequestParam注解&#xff0c;例如&#xff1a; RequestMapping("hello3")public String hello3( RequestParam("name" …

蘋果手機怎么清理聽筒灰塵_怎么清理手機聽筒的灰塵?

作為一個專業的強迫癥從業者&#xff0c;我已經看不慣手機聽筒的灰塵很久了&#xff0c;在經歷無數次失敗之后&#xff08;針&#xff0c;牙刷&#xff0c;牙簽&#xff0c;吸塵器等等&#xff09;。我必須要來分享一個超級實用的方法清理手機聽筒的灰塵。那就是&#xff0c;起…

linux mrtg 命令,linux服務器之流量監控(MRTG)

本系列文章原則&#xff1a;灰常詳細&#xff0c;灰常簡單&#xff0c;新手包學包會&#xff01;因其簡單&#xff0c;故未涉及安全性方面的考慮呵&#xff01;本實驗服務器為rhel-5-server-i386&#xff0c;客戶端為windows xp。本實驗所用軟件包均在rhel-5-server-i386-dvd.i…

搭建網站必不可少的知識14

安全組配置 “操作”-“安全組配置” 單擊“內網入方向”&#xff0c;“添加安全組規則”默認配置即可“確定”。在公網入方向和公網出方向都這樣添加上。&#xff08;如果存在就先刪除后在添加&#xff09;。現在應該能登錄了。 輸入密碼&#xff0c;點擊“確定” 登錄后只有一…

8代cpu能跑linux,Intel公布6/7/8代桌面CPU打漏洞補丁性能結果:影響很小

今天&#xff0c;Intel執行副總裁數據、數據中心事業部總經理Navin Shenoy(孫納頤)發布了第二篇性能測試文章&#xff0c;針對客戶端也就是桌面平臺用戶在打上修復“Spectre”和“Meltdown”漏洞補丁之后的實際情況。對于大部分普通電腦用戶來說&#xff0c;性能的影響并不顯著…

Spring mvc interceptor配置攔截器

原文&#xff1a;http://blog.csdn.net/liyisong2008/article/details/42915715 -------------------------------------------------------------------------- xml代碼&#xff1a; [java] view plaincopy <?xml version"1.0" encoding"UTF-8"?>…

rm: 無法刪除swap: 不允許的操作_safe-rm老板再也不用擔心我刪庫跑路啦[視頻]

saferm 老板再不怕我刪庫跑路https://www.zhihu.com/video/1177717527541731328在 linux 上&#xff0c;使用 rm 是一件非常危險的事情(最近又有朋友遇到了我才想起了寫這篇文章)&#xff0c;如果不幸手殘執行了 rm -rf 刪除了重要文件&#xff0c;建議你準備收拾包袱跑路吧。既…

視頻通信基礎知識之采集

在之前的文章里&#xff0c;我們說了不少關于音視頻相關的內容&#xff0c;但是一直沒有系統的來介紹視頻通信&#xff0c;接下來我們將出一個系列關于視頻通信的文章。幫助大家對視頻通信有一個更全面的認識。系列文大綱如下&#xff1a;視頻通信采集視頻通信處理視頻通信編碼…

Spring MVC 流程圖

Spring工作流程描述1. 用戶向服務器發送請求&#xff0c;請求被Spring 前端控制Servelt DispatcherServlet捕獲&#xff1b;2. DispatcherServlet對請求URL進行解析&#xff0c;得到請求資源標識符&#xff08;URI&#xff09;。然后根據該URI&#xff0c;調用HandlerMapping獲…

kafka maven沒有下載_Kafka 系列(三)——Kafka 生產者詳解

首先介紹一下 Kafka 生產者發送消息的過程&#xff1a;Kafka 會將發送消息包裝為 ProducerRecord 對象&#xff0c; ProducerRecord 對象包含了目標主題和要發送的內容&#xff0c;同時還可以指定鍵和分區。在發送 ProducerRecord 對象前&#xff0c;生產者會先把鍵和值對象序列…

linux 硬盤繁忙,icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)

icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)下載地址&#xff1a;https://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Iostat-Updated/details對腳本進行修改(默認為$12&#xff0c;12為w_await值&#xff0c;14為%util值)UTI…

centos7安裝kubernetes1.9集群

節點規劃 本次選用一個master節點&#xff0c;三個node節點來安裝k8s集群。   節點IPM010.xx.xx.xxN010.xx.xx.xxN110.xx.xx.xxN210.xx.xx.xx集群啟動前的準備(請用root用戶執行) 節點準備工作(在每臺機器上執行) 包括修改主機名&#xff0c;關閉防火墻等操作。  k8s集群會…

oracle中查詢某張表的大小

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_nametable_name;--注&#xff0c;僅表數據的大小&#xff0c;不含索引、分區、LOB類型 select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segm…

python圖像分割算法_OpenCV-Python 圖像分割與Watershed算法 | 三十四

目標 在本章中&#xff0c; 我們將學習使用分水嶺算法實現基于標記的圖像分割 我們將看到&#xff1a;cv.watershed() 理論 任何灰度圖像都可以看作是一個地形表面&#xff0c;其中高強度表示山峰&#xff0c;低強度表示山谷。你開始用不同顏色的水(標簽)填充每個孤立的山谷(局…

linux dns 問題嗎,Linux下DNS的問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:37:06 BJ-linux system-config-network[4031]: - //etc/…

NEO從源碼分析看共識協議

2019獨角獸企業重金招聘Python工程師標準>>> 0x00 概論 不同于比特幣使用的工作量證明&#xff08;PoW&#xff09;來實現共識&#xff0c;NEO提出了DBFT共識算法。DBFT改良自股權證明算法&#xff08;PoS&#xff09;&#xff0c;我沒有具體分析過PoS的源碼&#x…

oracle實現id自增和設置主鍵

1、關于主鍵&#xff1a;在建表時指定primary key字句即可&#xff1a; create table test( id number(6) primary key, name varchar2(30) ); 如果是對于已經建好的表&#xff0c;想增加主鍵約束&#xff0c;則類似語法&#xff1a; alter table test add constraint p…

python scrapy框架基如何實現多線程_Python實現在線程里運行scrapy的方法

本文實例講述了Python實現在線程里運行scrapy的方法。分享給大家供大家參考。具體如下&#xff1a; 如果你希望在一個寫好的程序里調用scrapy&#xff0c;就可以通過下面的代碼&#xff0c;讓scrapy運行在一個線程里。 """ Code to run Scrapy crawler in a thr…