- ajax 是什么?有什么作用?
- ajax是Asynchronous JavaScript + XML的簡寫。是一項(xiàng)能夠向服務(wù)器請求額外的數(shù)據(jù)而無須重新加載頁面的技術(shù)。
- 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)?(npm install -g server-mock) 知識點(diǎn)視頻-如何 mock 數(shù)據(jù)
- 注意事項(xiàng):
1 約定數(shù)據(jù)格式。
1 根據(jù)功能制定前后端接口,約定參數(shù)和返回值。
2 根據(jù)接口構(gòu)建Mock Server工程及其部署。
3 前后端獨(dú)立開發(fā),前端向Mock Server發(fā)送請求,獲取模擬的數(shù)據(jù)進(jìn)行開發(fā)和測試。
4 前后端都完成后,前后端連接調(diào)試
- Mock Server可以部署在本地,也可以部署到遠(yuǎn)程服務(wù)器。
1 把Mock Server工程部署到一個遠(yuǎn)程遠(yuǎn)程服務(wù)器上,前端開發(fā)的時候向該服務(wù)器發(fā)請求。
2 把Mock Server克隆到本地,開發(fā)的時候,開啟前端工程服務(wù)器和Mock Server,所有的請求都發(fā)向本地服務(wù)器,獲取到Mock數(shù)據(jù)。
- 點(diǎn)擊按鈕,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
- 設(shè)置一個變量flag用來判斷按鈕的點(diǎn)擊狀態(tài),當(dāng)用戶點(diǎn)擊按鈕時flag變量被賦值為點(diǎn)擊狀態(tài),直到ajax完成后flag變量被重新賦值為未點(diǎn)擊狀態(tài),可再進(jìn)行點(diǎn)擊。
var flag = 0;//未點(diǎn)擊狀態(tài)
el.addEventListener('click', function(){
if (flag) { return; }
flag = 1;//點(diǎn)擊狀態(tài)
ajax({
//代碼。。。
succss:function() {
flag = 0;//ajax處理完畢重新賦值為點(diǎn)擊狀態(tài)
//代碼。。。
}
error:function() {
flag = 0;//ajax處理完畢重新賦值為點(diǎn)擊狀態(tài)
//代碼。。。
}
//代碼。。。
})
})
代碼
- 封裝一個 ajax 函數(shù),能通過如下方式調(diào)用
function ajax(opts){
var xmlhttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {//執(zhí)行四次握手,2000為成功
var json = JSON.parse(xmlhttp.responseText);//解析返回的數(shù)據(jù)
opts.success(json);
}
if (xmlhttp.readyState == 4 && xmlhttp.status == 404) {//四次握手后才進(jìn)行404判斷,不會出現(xiàn)多次請求
opts.error();
}
}
var dataStr = '';
for (var key in opts.data) {
dataStr += key + '=' + opts.data[key] + '&';//遍歷data用&分隔
}
dataStr = dataStr.substr(0, dataStr.length - 1);//去掉最后一位的&
if (opts.type.toLowerCase() == 'post') {
xmlhttp.open(opts.type, opts.url, true);
xmlhttp.setRequestHeader('Content-type' , 'application/x-www-form-urlencoded');//post增加頭部識別格式
xmlhttp.send(dataStr);
}
if (opts.type.toLowerCase() == 'get') {
xmlhttp.open(opts.type, opts.url + '?' +dataStr, true);
xmlhttp.send();
}
}
document.querySelector('#btn').addEventListener('click', function(){
ajax({
url: 'getData.php', //接口地址
type: 'get', // 類型, post 或者 get,
data: {
username: 'xiaoming',
password: 'abcd1234'
},
success: function(ret){
console.log(ret); // {status: 0} dealwith(ret)
},
error: function(){
console.log('出錯了')
}
})//ajax函數(shù),括號內(nèi)的為參數(shù)
});
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。