何為ajax?
Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML)
是一種創(chuàng)建網(wǎng)頁交互的技術(shù),其特點是可以在不刷新頁面的情況下與服務(wù)器交互 更新部分網(wǎng)頁內(nèi)容
ta的原理很簡單:
Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個中間層(AJAX引擎),使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器。像—些數(shù)據(jù)驗證和數(shù)據(jù)處理等都交給Ajax引擎自己來做,,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時再由Ajax引擎代為向服務(wù)器提交請求
Ajax編程步驟:
1、創(chuàng)建對象: var xhr = new XMLHttpRequest();
2、 準(zhǔn)備發(fā)送(建立連接):xhr.open('請求的方式','url', '默認異步:true');
get請求下參數(shù)加在url后,.ashx?methodName = GetAllComment&str1=str1&str2=str2
xhr.open("post", "/ashx/myzhuye/Detail.ashx?methodName=GetAllComment", true);
//post請求下需要配置請求頭信息
//xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
3、執(zhí)行發(fā)送(發(fā)送請求):xhr.send(null);
4、 定制回調(diào)函數(shù)(設(shè)置監(jiān)聽):xhr.onreadystatechange();
xhr.readystate是指:存有 XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。
0: 請求未初始化
1: 服務(wù)器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應(yīng)已就緒
將ajax改為同步請求應(yīng)注意的問題:
1、界面會卡頓,卡頓的時間取決于網(wǎng)絡(luò)速度
2、xhr.onre 的回調(diào)將不會被執(zhí)行,將回調(diào)去除即可
封裝ajax:
function ajax(options, callback) {
var default_p = {
url: '',
method: 'post',
async: true,
data: ''
}
var op = {};
// 淺拷貝
for(var key in default_p) {
op[key] = default_p[key];
}
for(var key in options) {
// 查找op中的對象是否有options中的屬性,若有則傳入的覆蓋默認的
if(op.hasOwnProperty(key)) {
op[key] = options[key];
}
}
var xhr = new XMLHttpRequest();
xhr.open(op.method, op.url, op.async);
op.method === 'post' && xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
// 檢測是否是對象
function testObj(obj) {
if(obj instanceof Object) {
for(var key in obj) {
return true;
}
return false;
}
return false;
};
op.method === 'post' && testObj(op.data) ? xhr.send(JSON.stringify(op.data)) : xhr.send();
xhr.onreadystatechange = function() {
if(xhr.readyState === 4 && xhr.status === 200) {
// 判斷是不是對象
var reg = /^{.*}$/;
// 如果后臺傳過來的是對象則反序列化
if(reg.test(xhr.responseText)) {
callback(JSON.parse(xhr.responseText));
}
else {
callback(xhr.responseText);
}
}
}
}