Ajax教程

AJAX

AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。

AJAX 不是新的編程語言,而是一種使用現有標準的新方法。

AJAX 是與服務器交換數據并更新部分網頁的藝術,在不重新加載整個頁面的情況下。

AJAX 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。

什么是 AJAX ?

AJAX = 異步 JavaScript 和 XML。

AJAX 是一種用于創建快速動態網頁的技術。

通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

傳統的網頁(不使用 AJAX)如果需要更新內容,必需重載整個網頁面。

有很多使用 AJAX 的應用程序案例:新浪微博、Google 地圖、開心網等等。

Google Suggest

在 2005 年,Google 通過其 Google Suggest 使 AJAX 變得流行起來。

Google Suggest 使用 AJAX 創造出動態性極強的 web 界面:當您在谷歌的搜索框輸入關鍵字時,JavaScript 會把這些字符

發送到服務器,然后服務器會返回一個搜索建議的列表。

<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX script goes here ...
}
</script>
</head>
<body><div id="myDiv"><h3>Let AJAX change this text</h3></div>
<button type="button" onclick="loadXMLDoc()">Change Content</button></body>
</html>

AJAX - 創建 XMLHttpRequest 對象

XMLHttpRequest 是 AJAX 的基礎。

XMLHttpRequest 對象

所有現代瀏覽器均支持 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject)。

XMLHttpRequest 用于在后臺與服務器交換數據。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

創建 XMLHttpRequest 對象

所有現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內建 XMLHttpRequest 對象。

創建 XMLHttpRequest 對象的語法:

variable=new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

為了應對所有的現代瀏覽器,包括 IE5 和 IE6,請檢查瀏覽器是否支持 XMLHttpRequest 對象。如果支持,則創建 XMLHttpRequest 對象。如果不支持,則創建 ActiveXObject :

var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

AJAX - 向服務器發送請求

XMLHttpRequest 對象用于和服務器交換數據。

向服務器發送請求

如需將請求發送到服務器,我們使用 XMLHttpRequest 對象的 open() 和 send() 方法:

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();

open(method,url,async):

規定請求的類型、URL 以及是否異步處理請求。

  • method:請求的類型;GET 或 POST
  • url:文件在服務器上的位置
  • async:true(異步)或 false(同步)

send(string):

將請求發送到服務器。

  • string:僅用于 POST 請求

GET 還是 POST?

與 POST 相比,GET 更簡單也更快,并且在大部分情況下都能用。

然而,在以下情況中,請使用 POST 請求:

  • 無法使用緩存文件(更新服務器上的文件或數據庫)
  • 向服務器發送大量數據(POST 沒有數據量限制)
  • 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

GET 請求

一個簡單的 GET 請求:

xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();

在上面的例子中,您可能得到的是緩存的結果。

為了避免這種情況,請向 URL 添加一個唯一的 ID:

xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
xmlhttp.send();

如果您希望通過 GET 方法發送信息,請向 URL 添加信息:

xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
xmlhttp.send();

POST 請求

一個簡單 POST 請求:

xmlhttp.open("POST","demo_post.asp",true);
xmlhttp.send();

如果需要像 HTML 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 HTTP 頭。然后在 send() 方法中規定您希望發送的數據:

xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");

setRequestHeader(header,value):

向請求添加 HTTP 頭。

  • header: 規定頭的名稱
  • value: 規定頭的值

url - 服務器上的文件

open() 方法的?url?參數是服務器上文件的地址:

xmlhttp.open("GET","ajax_test.asp",true);

該文件可以是任何類型的文件,比如 .txt 和 .xml,或者服務器腳本文件,比如 .asp 和 .php (在傳回響應之前,能夠在服務器上執行任務)。

異步 - True 或 False?

AJAX 指的是異步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

XMLHttpRequest 對象如果要用于 AJAX 的話,其 open() 方法的 async 參數必須設置為 true:

對于 web 開發人員來說,發送異步請求是一個巨大的進步。很多在服務器執行的任務都相當費時。AJAX 出現之前,這可能會引起應用程序掛起或停止。

通過 AJAX,JavaScript 無需等待服務器的響應,而是:

  • 在等待服務器響應時執行其他腳本
  • 當響應就緒后對響應進行處理

Async = true

當使用 async=true 時,請規定在響應處于 onreadystatechange 事件中的就緒狀態時執行的函數:

xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}}
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();

我們不推薦使用 async=false,但是對于一些小型的請求,也是可以的。

請記住,JavaScript 會等到服務器響應就緒才繼續執行。如果服務器繁忙或緩慢,應用程序會掛起或停止。

注釋:當您使用 async=false 時,請不要編寫 onreadystatechange 函數 - 把代碼放到 send() 語句后面即可:

AJAX - 服務器響應

服務器響應

如需獲得來自服務器的響應,請使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性。分別獲得字符串型的數據和xml型的數據

responseText 屬性

如果來自服務器的響應并非 XML,請使用 responseText 屬性。

responseText 屬性返回字符串形式的響應,因此您可以這樣使用:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

responseXML 屬性

如果來自服務器的響應是 XML,而且需要作為 XML 對象進行解析,請使用 responseXML 屬性:

請求?books.xml?文件,并解析響應:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++){txt=txt + x[i].childNodes[0].nodeValue + "<br />";}
document.getElementById("myDiv").innerHTML=txt;

AJAX - onreadystatechange 事件

onreadystatechange 事件

當請求被發送到服務器時,我們需要執行一些基于響應的任務。

每當 readyState 改變時,就會觸發 onreadystatechange 事件。

readyState 屬性存有 XMLHttpRequest 的狀態信息。

下面是 XMLHttpRequest 對象的三個重要的屬性:

onreadystatechange:存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。

readyState:

存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。

  • 0: 請求未初始化
  • 1: 服務器連接已建立
  • 2: 請求已接收
  • 3: 請求處理中
  • 4: 請求已完成,且響應已就緒

status:

200: "OK"

404: 未找到頁面

在 onreadystatechange 事件中,我們規定當服務器響應已做好被處理的準備時所執行的任務。

當 readyState 等于 4 且狀態為 200 時,表示響應已就緒:

xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}}

注釋:onreadystatechange 事件被觸發 5 次(0 - 4),對應著 readyState 的每個變化

使用 Callback 函數

callback 函數是一種以參數形式傳遞給另一個函數的函數。

如果您的網站上存在多個 AJAX 任務,那么您應該為創建 XMLHttpRequest 對象編寫一個標準的函數,并為每個 AJAX 任務調用該函數。

該函數調用應該包含 URL 以及發生 onreadystatechange 事件時執行的任務(每次調用可能不盡相同):

<html>
<head>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("/ajax/test1.txt",function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}});
}
</script>
</head>
<body><div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">通過 AJAX 改變內容</button></body>
</html>

AJAX ASP/PHP 請求實例

<html>
<head>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET","/ajax/gethint.asp?q="+str,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("/ajax/test1.txt",function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}});
}
</script>
</head>
<body><div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">通過 AJAX 改變內容</button></body>
</html>

源代碼解釋:

如果輸入框為空 (str.length==0),則該函數清空 txtHint 占位符的內容,并退出函數。

如果輸入框不為空,showHint() 函數執行以下任務:

  • 創建 XMLHttpRequest 對象
  • 當服務器響應就緒時執行函數
  • 把請求發送到服務器上的文件
  • 請注意我們向 URL 添加了一個參數 q (帶有輸入框的內容)

?

轉載于:https://www.cnblogs.com/runhua/p/7141859.html

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

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

相關文章

dm365 resize

DM368支持視頻的縮放功能&#xff0c;例如DM365可以編碼一個720P的&#xff0c;同時可以以任意分辨率&#xff08;小于720P的分辨率&#xff09;輸出。其中有兩種模式&#xff1a;IMP_MODE_SINGLE_SHOT&#xff0c;IMP_MODE_CONTINUOUS. 在用dm365的時候&#xff0c;用resizer…

SSH

http://www.cnblogs.com/hoobey/p/5512924.html struts --- 控制器 hibernate 操作數據庫 spring 解耦 Struts 、 spring 、 Hibernate 在各層的作用 1 &#xff09; struts 負責 web 層 . ActionFormBean 接收網頁中表單提交的數據&#xff0c;然后通過 Action 進…

C#halcon點擬合圓形函數

public bool FitCircle(double[] X, double[] Y, out double RcX, out double RcY, out double R){t

MyBatis 實踐 -配置

MyBatis 實踐標簽&#xff1a; Java與存儲 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名稱隨意),其配置內容和順序例如以下: properties : 屬性(文件)載入/配置settings : 全局配置參數typeAliases : 定義類型別名typeHandlers : 類型處理器objectF…

DM365視頻處理流程/DM368 NAND Flash啟動揭秘

DM365的視頻處理涉及到三個相關處理器&#xff0c;分別是視頻采集芯片、ARM處理器和視頻圖像協處理器&#xff08;VICP&#xff09;&#xff0c;整個處理流程由ARM核協調。視頻處理主要涉及三個處理流程&#xff0c;分別是視頻采集、視頻編碼和對編碼后的視頻的處理&#xff0c…

系統的Drawable(四)-LayerListDrawable

系統的Drawable(四)-LayerListDrawable 學習自 https://blog.csdn.net/u014695188/article/details/52815444 LayerListDrawable 漫談 使用layer-list可以將多個drawable按照順序層疊在一起顯示&#xff0c;默認情況下&#xff0c;所有的item中的drawable都會自動根據它附上vie…

圖像處理:鏡頭頻率(衍射極限) 和 相機采樣:顯微鏡的采樣定理

采樣定理大家都知道&#xff0c;相信不用多說。 我自己寫下來給自己看。 下面&#xff0c;我總結 大家平時照相的鏡頭或者顯微鏡的物鏡的情況下&#xff1a; 采樣頻率是指圖像在數字化的時候的過程&#xff0c;實際上就是我們相機感光元件CCD或者CMOS的一個個小像元把模擬的連續…

【練習】使用事務控制語句

1.使用show engines 命令確定系統中是否有任何事務存儲引擎可用以及哪個是默認引擎。 2.使用set autocommit 語句啟用autocommit。 3.為使用world數據庫做準備&#xff0c;確認city表使用事務存儲引擎innodb。 4.使用start transaction 語句顯式啟動新事務。 5.刪除一行。 6.使…

老男孩Day1作業(一):編寫登錄接口

要求&#xff1a;編寫登錄接口 1. 輸入用戶名和密碼 2. 認證成功后顯示歡迎信息 3. 輸錯三次后鎖定 1&#xff09;編寫思路 編寫思路參考下面GitHub鏈接中的流程圖 https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業/Day1_作業_登錄接口…

hashcat源碼分析1

typedef struct hash{void *digest;salt_t *salt;void *esalt;void *hook_salt; // additional salt info only used by the hook (host)int cracked;hashinfo_t *hash_info;char *pw_buf;int pw_len;} hash_t;一.1. 信號 函數&a…

Davinci及U-boot的一些介紹

TI推出的數字多媒體平臺DM系列&#xff0c;集成了ARM與DSP雙核處理器&#xff1a;DSP處理器運行DSP/BIOS操作系統&#xff0c;負責音視頻編解碼算法以及其他圖形處理算法&#xff1b;ARM處理器運行MontaVista Linux操作系統&#xff0c;負責設備初始化、用戶圖形界面管理。ARM處…

像素越多越好?像元的面積越小越好?為何底大一級壓死人?

像素越多越好&#xff1f;像素點的面積越小越好&#xff1f;為何底大一級壓死人&#xff1f; 像素是&#xff1a;圖像最小單元的數量&#xff0c;例如6000*4000&#xff0c;像素數量就是24*10^6。 像素太少當然圖像就看不見了&#xff0c;看不清晰了。 但是現在幾乎所有手機和相…

設計模式(5)--工廠模式

//5.工廠模式 //ver1 //回顧簡單工廠模式 class OperationFactory { public:static Operation createOperation(char chOper){Operation * op NULL;switch(chOper){case :op new OperationAdd();break;case -:op new OperationSub();break;default:break;}return *op;} };vo…

對于多屬性類型系統的數據庫設計

主要是以下幾類系統: 生活信息系統, 內容:小, 屬性:大,電商商品系統, 內容:大, 屬性:大,風控征信系統, 內容:小, 屬性:大,新聞系統, 內容:大, 屬性:小,這些系統共同的特點, 都是在主體內容上會攜帶多個屬性, 并且屬性需要隨時能調整, 并且要求能兼容舊屬性, 還需要頻繁的通過屬…

linux環境部署常用命令

1.  查看當前所屬目錄&#xff1a;pwd2.  回到上級目錄&#xff1a;cd ../回到上兩級目錄&#xff1a;cd ../ ../3.  查看當前目錄下有哪些文件&#xff1a;ls4.  查看最后100行日志&#xff1a;tail -100 catalina.out動態重看操作日志&#xff1a;tail -f catalina.o…

DM6446開發攻略:V4L2視頻驅動和應用分析

針對DAVINCI DM6446平臺&#xff0c;網絡上也有很多網友寫了V4L2的驅動&#xff0c;但只是解析Montavistalinux-2.6.10 V4L2的原理、結構和函數&#xff0c;深度不夠。本文決定把Montavista 的Linux-2.6.18 V4L2好好分析一下&#xff0c;順便講解在產品中的應用&#xff0c;滿足…

相機像素尺寸(像元大小)和成像系統分辨率之間的關系

相機像素尺寸&#xff08;像元大小&#xff09;和成像系統分辨率之間的關系 在顯微成像系統中&#xff0c;常常會用分辨率來評價其成像能力的好壞。這里的分辨率通常是指光學系統的極限分辨率以及成像探測器的圖像分辨率。最終圖像所呈現出的實際分辨率&#xff0c;取決于二者的…

H5網頁播放器播不了服務器上的mp4視頻文件

打開IIS&#xff0c;在功能視圖里找到MIME類型菜單&#xff0c;打開該菜單后鼠標右鍵添加.mp4擴展名的MIME類型video/mp4 其他視頻文件播放不了估計也得在IIS里添加對應的MIME類型&#xff08;從服務器下載文件時也得添加對應的MIME類型&#xff09; 轉載于:https://www.cnblog…

不定寬度居中

一、傳統方法 <div class"wrap"><div class"inner">html &#xff1a; 讓 inner 居中</div> </div> .wrap {float: left; /* 自適應內容寬度 */position: relative;left: 50%; } .inner {position: relative;left: -50%; } 二、…

文章目錄自動生成器

提供一個插件&#xff0c;可以實現segmentfault的文章目錄效果啦~~ 不止點擊跳轉還滾動激活當前鏈接 demo地址 使用很簡單 <!-- 文章容器 --> <div id"kCatelog"></div> <!-- 目錄容器 --> <div class"k-catelog-list" id"…