程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 你知道AJAX有多少?

你知道AJAX有多少?

編輯:C++入門知識

Ajax 是Asynchronous Javascript and XML的簡寫,對它最多的人是無非是局部刷新技術,它可以在不刷新頁面的情況下向後台發送或者請求數據。它的核心是XMLHttpRequest對象(簡稱XHR),在IE7+、Firfox、Opera、Chrome、Safari都支持原生的XHR對象即顯式使用var xhr = new XMLHttpRequest()就可以直接創建此對象。如果要支持IE7以下版本的,則需要使用ActiveX對象來實現。隨著WindowXP的退休,相信用到IE7以下版本的幾乎沒有了,但還是提供以前的兼容實現方式:

function createXHR () {
	if (typeof XMLHttpRequest != "undefined") {
		return new XMLHttpRequest();
	} else if (typeof ActiveXObject != "undefined") {
		var version =["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp.2.0"],
			i,
			len;

		for (i = 0.len = version.length; i < len; i++) {
			try{
				new ActiveXObject(version[i]);
				arguments.callee.activeXString = version[i];
				break;
			} catch (ex){
				//dosomething();
			}
		};

		return new ActiveXObject(arguments.callee.activeXString);
	} else {
		throw new Error("No XHR object available!");
	};
}
下面是你所看見AJAX最原生的js實現方式,現在jquery等框架已經完全封裝,下面講解每個步驟的作用以及使用。
var xhr = new createXHR();
xhr.onreadyStatechange = function() {
	if (xhr.readyState == 4) {
		if (xhr.status >= 200 && xhr.status < 300) { //http狀態為成功
			alert(xhr.responseText);
		} else {
			alert("請求沒有成功!狀態說明:" + xhr.statusText);
		}
	};
}
xhr.open("get", "example.jsp", true);//啟動一個請求以備發送
xhr.send(null); //當請求類型為GET時,參數為null;為POST時,傳送的是作為請求主體的數據。
responseText:作為響應主體返回的文本。
responseXML:返回響應內容為"text/xml""application/xml"這個屬性將保存XML DOM文檔。
status:HTTP狀態碼。
statusText:HTTP狀態說明。
以上關於HTTP請求的請參照HTTP協議。
首先將open函數,它有三個參數:HTTP請求的類型(get,post,delete等),請求的url,是否使用異步發送方式。
什麼是異步方式?先看看非異步方式實現方式:

var xhr = new createXHR();
xhr.open("get", "example.jsp", false); //第三個參數為false,為同步方式
xhr.send(null);
if (xhr.status >= 200 && xhr.status < 300) { //http狀態為成功
		alert(xhr.responseText);//處理數據
	} else {
		alert("請求沒有成功!狀態說明:" + xhr.statusText);
}
很容易看到,只有到xhr在浏覽器得到服務器方面返回的數據之後才會往下執行;
如果使用異步,只需要對xhr對象的readystaty的值進行監聽即可,
readyStatey可以取以下值:
0:未初始化,尚未調用open().
1:啟動,已經調用open(),還未調用send().
2:發送,已經調用send(),但未收到響應。
3:接收,已經收到部分響應數據。
4:完成,已經收到全部響應數據。
所以在判斷時會使用readyState==4.
它依然可以往下執行js代碼。
//----------------------------------------------------------------//

在xhr.open()之後,send()之前可以設置請求的頭部信息關於頭部信息,請參考HTTP協議,
例如下面將用戶信息表單序列化之後發送到服務器,告訴服務器我發送的內容是表單形式。

xhr.open("post", "example.jsp", true); 
setRequestHead("Content-Type", "application/x-www-form-urlencoded");
var form = document.getElementById("user-info");
xhr.send(serialize(form));

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved