正常函數的調用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>函數的調用</title>
</head>
<body>
<script>
function f1(){
console.log('1111111111111');
console.log('1111111111111');
console.log('1111111111111');
console.log('1111111111111');
console.log('1111111111111');
}
function f2(){
console.log('222222222222222');
console.log('222222222222222');
f1();
console.log('222222222222222');
console.log('222222222222222');
console.log('222222222222222');
}
function f3(){
console.log('3333333333333333');
console.log('3333333333333333');
f2();
console.log('3333333333333333');
console.log('3333333333333333');
console.log('3333333333333333');
}
f3()
</script>
</body>
</html>
調用順序:
調用f3函數,輸出2次33333,然后調用f2函數,輸出2次22222,調用f1函數,輸出5次1111111;
f1的代碼執行完成后會回到被調用的位置接着執行代碼,此時輸出3次222222,然后回到f2被調用的位置,輸出3次333
回調函數
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>回調函數</title>
</head>
<body>
<script>
function getResult(n1,n2,fn){
var result = fn(n1,n2)
return result;
}
var res = getResult(120,230, function (a, b) {
return a + b;
})
console.log(res);
</script>
</body>
</html>
調用順序:
調用getResult時傳入3個參數,第3個是一個匿名函數,函數里面計算ab的和,getResult接受到120,230參數分別賦值給n1和n2,然后調用fn函數進行計算值,返回結果給result,返回result給res接收,最后控制台輸出res就得到350了。
Get和Post請求的差異

封轉AJAX異步發送請求的過程
目錄結構:

myAjax.js
/* 1.創建異步對象 2. 設置請求行 3. 設置請求頭 4. 設置請求體 5. 設置監視異步對象狀態 */ // 這種方式不好,參數固定死了,不靈活,順序只能這樣 // ajax是一個函數,如果引入到別的文件當中,有可能會靠變量或函數的污染 /* function ajax(params) { var xhr = new XMLHttpRequest(); // 設置請求行 xhr.open('get', '/getStudentsJSON'); // 設置請求頭 // get請求可以省略這一步 // 設置請求體 xhr.send(null); // 監聽異步對象狀態 xhr.onreadystatechange = function () { // 判斷數據是否全部接收完成 if (xhr.status == 200 && xhr.readyState == 4) { // 由於服務端響應過來的json數據是字符串類型的,這里需要把它轉換成對象或者數組類型,使用JSON.parse()方法 var obj = JSON.parse(xhr.responseText); console.log(obj); } } } */ var $ = { // 創建一個名為convert方法,把對象轉換成拼接字符串的方法 convertTostring: function(obj){ var str = ''; for(var key in obj){ str += key + '=' + obj[key] + '&'; console.log(str); } console.log(str.slice(0,-1)); return str.slice(0,-1); }, // 代碼沒問題 // 創建一個名為ajax方法,進行使用異步對象發送請求 ajax: function(params) { // 傳入的參數是一個對象 // 這個parmas對象里面應該包括:type,url,data,callback // 定義變量獲取數據, 短路運算 var type = params.type || 'get'; // 獲取請求的方式 var url = params.url || location.pathname; //location.href也可以; 獲取要發送的目標地址 var data = this.convertTostring(params.data || {}); // 獲取要發送的數據 var success = params.success; var dataType = params.dataType || 'text/plain'; // 什么都沒有就以純字符串 // 創建異步AJAX對象 var xhr = new XMLHttpRequest(); if(type=='get'){ url = url+"?"+data; //http://baidu.com:3002/submit?userName=jack&passPWd=jack1234 data = null; } // 設置請求行 xhr.open(type, url); // 設置請求頭 if(type=='post'){ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } // get請求可以省略這一步 // 設置請求體 xhr.send(data); // 這里的data就是通過convertTostring方法拼接的字符串 // 監聽異步對象狀態 xhr.onreadystatechange = function () { // 判斷數據是否全部接收完成 if (xhr.status == 200 && xhr.readyState == 4) { var res; // 把服務器響應回來的數據進行判斷然后保存起來 if(dataType =='json'){ res = JSON.parse(xhr.responseText) }else if(dataType=='xml'){ res = xhr.responseXML; }else{ res = xhr.responseText; // 當成純文本字符串接收 } success(res); } } } }
studentsJSON.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>studentsJSON頁面</title>
<!-- <script src="/assets/js/myAjax.js"></script> -->
<!-- 引入jQuery文件 -->
<script src="/assets/js/jquery-1.12.2.js"></script>
</head>
<body>
<h2>這是studentsJSON頁面</h2>
<input type="button" id="btn" value="獲取JSON數據">
<table border="1">
<thead>
<th>id</th>
<th>姓名</th>
<th>性別</th>
<th>年齡</th>
<th>專業</th>
<th>地址</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>小蘇</td>
<td>男</td>
<td>18</td>
<td>前端</td>
<td>佛山</td>
</tr>
</tbody>
</table>
<script>
// 查找元素
var btn = document.querySelector('#btn');
var tbody = document.querySelector('tbody');
// 給btn綁定點擊事件
btn.addEventListener('click', function () {
$.ajax({
type: 'get',
url: '/getStudentsJSON',
dataType: 'json', // 告訴ajax函數,將返回來的數據以json的形式進行處理
// 創建一個方法
success: function (obj) {
var data = obj.data;
var str = '';
for (var i = 0; i < data.length; i++) {
// 套用ES6的模版快速拼接字符串
str += `
<tr>
<td>${data[i].id}</td>
<td>${data[i].name}</td>
<td>${data[i].gender}</td>
<td>${data[i].age}</td>
<td>${data[i].zhuanye}</td>
<td>${data[i].address}</td>
</tr>
`
}
// 渲染頁面中的數據
tbody.innerHTML = str;
},
})
})
</script>
</body>
</html>
studentsXML.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>studentsXML頁面</title>
<!-- 引入封轉好的AJAX文件 -->
<script src="/assets/js/myAjax.js"></script>
</head>
<body>
<h2>這是一個使用XML數據渲染的列表</h2>
<input type="button" id="btn" value="獲取XML數據">
<table border="1">
<thead>
<th>id</th>
<th>姓名</th>
<th>性別</th>
<th>年齡</th>
<th>專業</th>
<th>地址</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>小蘇</td>
<td>男</td>
<td>18</td>
<td>前端</td>
<td>佛山</td>
</tr>
</tbody>
</table>
<script>
// 查找元素
var btn = document.querySelector('#btn');
var tbody = document.querySelector('tbody');
// 給按鈕綁定點擊事件
btn.addEventListener('click', function () {
// 調用ajax方法傳入參數
$.ajax({
type: 'get', // 請求方式
url: '/getStudentsXML', // 服務器接口地址
dataType: 'xml', // 服務器返回的數據格式
success: function(obj){ // 回調函數
console.log(obj);
console.log(typeof(obj));
var items = obj.querySelector('items').children;
var str = '';
for(var i=0; i<items.length; i++){
str += `
<tr>
<td>${items[i].querySelector('id').innerHTML}</td>
<td>${items[i].querySelector('name').innerHTML}</td>
<td>${items[i].querySelector('gender').innerHTML}</td>
<td>${items[i].querySelector('age').innerHTML}</td>
<td>${items[i].querySelector('zhuanye').innerHTML}</td>
<td>${items[i].querySelector('address').innerHTML}</td>
</tr>
`
}
tbody.innerHTML = str;
}
});
})
</script>
</body>
</html>
如果不想手動封裝AJAX,可以使用JQuery,直接引入jQ文件,其他不需要改,直接$.ajax({傳參})就可以了。
