題目1: ajax 是什么?有什么作用?
ajax全稱Asynchronous Javascript And XML,即創建異步交互的網頁應用的一種開發技術,當在網頁中涉及到很多數據信息時,往往不是把所有的信息直接寫在html頁面上,而是通過數據交互從后臺獲取數據,而傳統的表單提交數據需要提交整個網頁,有時只是更新頁面上很少部分的數據卻要刷新整個網頁,效率低,用戶體驗差,因此人們思考通過能否通過局部刷新網頁的方式,達到肉眼看起來“無刷新”的效果,這樣ajax這種新的技術就被提出來,ajax通過核心對象XMLHttpRequest,用js的方式向服務端提交少量數據,并處理響應,同時不阻塞用戶在網頁上的其他動作,達到異步刷新,局部更新網頁的目的。
題目2: 前后端開發聯調需要注意哪些事情?后端接口完成前如何 mock 數據?
確認好分工,角色;約定好接口的參數,格式,數據,接口地址,傳遞方式,回傳數據的內容類型;討論好接口的實現方式后,由前后臺人員確認是否可行,再開始開發;確認接口與html內容整合統一后若頁面出現樣式或其他問題由誰來解決。
mock數據指的是在后端開發沒有完成時,前端可以通過mock方法搭建本地服務器,模擬后臺數據來實現數據交互的效果。可以通過安裝xampp在本地搭建服務器,也可以安裝server-mock,這樣不需要特地去寫一個后臺的處理頁面文件來訪問數據。
題目3:點擊按鈕,使用 ajax 獲取數據,如何在數據到來之前防止重復點擊?
設置狀態鎖:設置一個變量locked,初始值為false,觸發相關事件時為ture,并且設置當locked為true時return。當事件函數里面的ajax執行完之后設置locked為false,這樣當ajax請求的數據還沒來之前如果重復點擊的話,就會直接return出該事件函數,使重復點擊無效。
題目4:封裝一個 ajax 函數,能通過如下方式調用。后端在本地使用server-mock來 mock 數據
function ajax(opts) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var result = JSON.parse(xmlhttp.responseText);
opts.success(result);
}
if (xmlhttp.readyState == 4 && xmlhttp.status == 404) {
opts.error();
}
};
var tmpArr = [];
for (var key in opts.data) {
tmpArr.push(key + "=" + opts.data[key]);
}
var data = tmpArr.join('&');
if (opts.type.toLowerCase() === 'get') {
xmlhttp.open('get', opts.url + '?' + data);
xmlhttp.send(null);
}
if (opts.type.toLowerCase() === 'post') {
xmlhttp.open('get', opts.url);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
}
}