學習目錄:javascript
我的網站原創連接地址:不足之處歡迎留言...逃...
(1)AJAX(Asynchronous JavaScript and XML):異步的javascript和xml的縮寫。php
(2)AJAX不是某種編程語言,而是一種在無需加載整個頁面的狀況下可以更新部分網頁的技術。html
(3)傳統網頁的缺點:須要更新內容或者提交一個表單,須要從新加載整個頁面;使用AJAX優勢:經過在後臺跟服務器進行少許的數據交換,網頁就能夠實現異步局部更新。對於填寫複雜表單來講,有很是好的用戶體驗。前端
(4)AJAX同步與異步:同步說白了就是加載整個頁面;異步可以加載部分頁面。具體的話,客戶端與服務器端的聯繫。Ajax技術出現以前,都是同步的交換數據,若是填寫的比較複雜的表單將很是麻煩。有了XMLHttpRequest對象後,同步世界變爲了異步世界。經過XMLHttpRequest這個對象後臺能夠和服務器進行數據交換。java
(5)XMLHttpRequest對象建立:var requerst=new XMLHttpRequest();
直接實例化對象便可!注意:IE5和IE6不支持這種定義,若是要實現瀏覽器頁面兼容,以下代碼所示:mysql
var request; if(window.XMLHttpRequest){ request = new XMLHttpRequest(); // IE7+,Firefox,Chrome,Opera,Safari... }else{ request = new ActiveObject("Microsoft.XMLHTTP"); // IE6,IE5 }
(6)HTTP請求:http是一種無狀態的協議:說白了就是不能創建持久鏈接且無記憶的協議。進一步:經過頁面請求和響應的過程,實現網頁的調試。jquery
(6.1)一個完整的HTTP請求過程,一般有下面7個步驟:web
(6.2)http請求通常由四部分組成:ajax
(6.3)GET與POST[收集來自method="post/get"的表單中的name值]sql
說白了,都是收集從表單裏面傳過來的值。傳過去的值,一種以url的形式顯示(不安全),一種以值的形式顯示(安全);GET通常用於信息的獲取,使用url傳遞參數,限制在2000個字符,對全部人可見,不安全。POST通常用於從表單發送數據,參數在http請求體中,不限制信息發送數量。
(6.4)Http響應通常由三個部分組成:
(6.5)Http狀態碼由三位數字組成,其中首位數字定義了狀態碼的類型:
(7)XMLHttpRequest發送請求:(對象的方法)
舉個栗子:
request.open("POST","create.php",true); request.setRequestHeader("Content-type","application/x-www-form-urlencoded");//設置http的頭信息,告訴web服務器要發送一個表單;注意:setRequest請求必定要放在open和send之間,不然會拋出異常 request.send("name=王大錘&sex=男");
(8)XMLHttpRequest取得響應:(對象的方法和屬性)
readyState屬性:響應返回成功的時候獲得通知。
舉個栗子:涵蓋了ajax的大部份內容(典型的xhr創建ajax的過程)
var request = new XMLHttpRequest();//建立XHR對象 request.open("GET","get.php",true);//調用異步請求 request.send();//發送異步請求 //對事件進行監聽,判斷服務器是否正確得作出了響應 request.onreadystatechange = function(){ if(request.readyState===4 && request.status === 200){ request.reponseText;//接收服務器響應回送的數據 } }
實戰:[服務器端與客戶端]實現查詢員工和新建員工的後臺接口
(1)客戶端部分代碼:
//新建員工客戶端代碼 document.getElementById("save").onclick=function(){ var request=new XMLHttpRequest();//建立XHR對象 request.open("POST","action.php");//調用異步請求 //data拼接的URL //document.getElementById("staffName").value獲取表單中用戶寫入的值 var data = "username=" + document.getElementById("staffName").value + "&num=" + document.getElementById("staffNumber").value + "&workname=" + document.getElementById("staffJob").value; request.setRequestHeader("Content-type","application/x-www-form-urlencoded");//設置http的頭信息 request.send(data);//發送異步請求 //對事件進行監聽,判斷服務器是否能正確作出響應 request.onreadystatechange=function(){ if(request.readyState===4){ if(request.status===200){ //innerHTML不只能夠讀取元素內容,還能夠將內容寫入元素 //ajax引擎對象經過responseText屬性或者responseXML屬性接收服務器回送的數據,而後在靜態頁面中對其進行處理,使頁面達到局部刷新的效果 document.getElementById("createResult").innerHTML=request.responseText; }else{ alter("發生錯誤:"+request.status); } } } }
(2)服務器端部分代碼:
//查詢員工服務器端代碼 <?php header('Content-type:text/html;charset=utf8'); $con=mysqli_connect("127.0.0.1","",""); mysqli_select_db($con,"function"); $sql="SELECT * FROM `ajax`"; $query=mysqli_query($con,$sql); //數據庫數據的總條數$number $number=mysqli_num_rows($query); for($i=0;$i<$number;$i++){ //將每條數據轉換成關聯數組打印出來 $arr=mysqli_fetch_row($query); //print_r($arr); //echo $arr[2];die; if($_GET['num']==$arr[2]){ echo "找到員工:編號$arr[2],姓名:$arr[1],職位:$arr[3]"; break; } } ?>
(1)json:javascript對象表示法。
(2)json是存儲和交換文本信息的語法,相似xml。採用鍵值對的方式組織,易於人們閱讀與機器解析。
(3)json是獨立於語言的,無論什麼語言均可以解析json,只要按json的規則來就行。
(4)json的長度比xml小;json讀寫的速度更快;json可使用js內建方法直接解析,轉化成js對象,很是方便。
(5)json語法規則:json數據的書寫格式是:名稱/值對。
名稱/值對組合中的名稱寫在前面(在雙引號中),值對寫在後面(一樣在雙引號中),中間用冒號隔開,好比"name":"王大錘"
。注意:json與javaScript對象表示法不一樣,javaScript對象表示法的鍵值不須要用引號,可是json的鍵值要用引號。
注意:json能夠是整型、浮點型、字符串(在雙引號中)、布爾值(true或false)、數組(在方括號中)、對象(在花括號中)、null等數據類型。
舉個栗子:
{//定義了一個json對象 "staff":[//定義了一個數組 {"name":"王大錘","age":21},//定義了一個name對象 {"name":"叫獸","age":35} ] }
(6)json解析:eval()和JSON.parse()兩種方式解析成JSON形式
兩種方法比較:建議使用JSON.parse()方法解析成JSON形式
eval();不安全,若是json中有函數或js程序代碼(alert或一個window.location.href()跳轉連接病毒網站等),會優先執行代碼,危險操做。JSON.parse();對json文件具備校驗功能,若是json文件裏面有程序腳本,會解析報錯。
舉個栗子:
var jsondata='{ "staff":[{ "name":"王大錘", "age":22 }, { "name":"叫獸", "age":23 }, { "name":"王尼瑪", "age":24 } ] }'; var jsonobj=JSON.parse(jsondata);//JSON.parse解析JSON var jsonobj=eval('(' + jsondata + ')');//eval解析JSON alert(jsonobj.staff[0].name);
注意:上面書寫是錯誤的,只爲了看清楚。逗號不是分隔符,逗號是文本內容,全部的都應該緊湊寫,不能本身爲了看清楚,人爲用空格分開。(這裏找了一個小時錯誤...)
(7)json驗證工具:JSONLint
(8)舉個栗子:
使用json,首先須要服務器端的約定, 用此種方法可以減小更多的判斷,以更加優雅的形式顯示 { //前端規則驗證、後端數據驗證 "success":true,//是否正確執行(表單等規則驗證) "msg":"×××"//請求的響應值是否成功(http響應返回的信息) }
服務器端部分代碼:
//echo "參數錯誤,員工信息填寫不全"; echo '{"success":false,"msg":"參數錯誤,員工信息填寫不全"}'; if($query){ //echo "員工:" . $_POST["username"] . " 信息保存成功!"; echo '{"success":true,"msg":"員工保存成功"}'; }else{ //echo "員工:" . $_POST["username"] . " 信息保存失敗!"; echo '{"success":false,"msg":"員工保存失敗"}'; }
客戶端json代碼:其它不變,將服務器端響應傳過來的responseText(文本形式)轉換爲(JSON形式),將json字符串轉化爲了一個json對象data,而後就可以以對象的形式處理數據
request.onreadystatechange=function(){ if(request.readyState===4){ if(request.status===200){ //將服務器端響應傳過來的responseText(文本形式)轉換爲(JSON形式) //將json字符串轉化爲了一個json對象data var data=JSON.parse(request.responseText); if(data.success){ document.getElementById("createResult").innerHTML=data.msg; }else{ document.getElementById("createResult").innerHTML="出現錯誤"+data.msg; } } } }
(1)使用jquery實現ajax請求:做用:避免兼容問題,代碼簡潔,操做快捷方便。
(2)語法:jQuery.ajax([settings])
更新時間:2018/2/13 23:36:53