1xx:消息 2xx:成功 3xx:重定向 4xx:請求錯誤 5xx:服務器錯誤
0:異步對象已經建立 1:異步對象初始化完成,發送請求 2:接收服務器返回的原始數據 3:數據正在解析,解析須要時間 4:數據解析完成,數據可使用了
XML的特色,出身名門,W3C制定,微軟和IBM曾經共同大力推薦過的數據格式.XML 指可擴展標記語言(Extensible Markup Language),被設計用來傳輸和存儲數據,HTML 是設計用來表示頁面的.html
JSON(JavaScript Object Notation),出身草根,是 Javascript 的子集,專門負責描述數據格式.JSON自己是一個特殊格式
的字符串,能夠轉換成js對象,是網絡上用來傳輸數據使用最普遍的數據格式,沒有之一.html5
function pinjieData(obj) { //obj 就至關於 {key:value,key:value} //最終拼接成鍵值對的字符串 "key:value,key:value" var finalData = ""; for(key in obj){ finalData+=key+"="+obj[key]+"&"; //key:value,key:value& } return finalData.slice(0,-1);//key:value,key:value } function ajax(obj) { var url = obj.url; var method = obj.method.toLowerCase(); var success = obj.success; var finalData = pinjieData(obj.data); //finalData最終的效果key:value,key:value //1.建立xhr對象 var xhr = new XMLHttpRequest(); //get方法拼接地址,xhr.send(null) if (method=='get'){ url = url + "?"+finalData; finalData = null; } //2.設置請求行 xhr.open(method,url); // 若是是post請求,要設置請求頭 if (method=='post'){ xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded") } //3.發送 xhr.send(finalData); //4.監聽服務器返回的數據 xhr.onreadystatechange = function () { if (xhr.status==200 && xhr.readyState==4){ var result = null; //獲取返回的數據類型 var rType = xhr.getResponseHeader("Content-Type"); if (rType.indexOf('xml')!=-1){ result = xhr.responseXML; }else if(rType.indexOf('json')!=-1){ // JSON.parse 的意思是 將 json格式的字符串 //好比 [{ "src":"./images/nav0.png","content":"商品分類1"}] //轉成js對象 result = JSON.parse(xhr.responseText); }else{//當成普通的字符串去處理 result = xhr.responseText; } //將這裏解析好的數據交給頁面去渲染 success(result); } } }
jQuery爲咱們提供了更便利的ajax封裝使用.jquery
url :接口地址 type :請求方式(get/post) timeout : 要求爲Number類型的參數,設置請求超時時間(毫秒) dataType: 應該是客戶端傳遞給服務器一個值,告訴服務器如何進行處理: data: 發送請求數據 beforeSend: 要求爲Function類型的參數,發送請求前能夠修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中若是返回false能夠取消本次ajax請求. success: 成功響應後調用 error: 錯誤響應時調用 complete: 響應完成時調用(包括成功和失敗)
//ajax===get $.ajax({ url:'', data:'key=value&key=value', type:'get', success:function (result) { console.log(result); } }); //ajax===post $.ajax({ url:'', data:'key=value&key=value', type:'post', success:function (result) { console.log(result); } }); //$.get $.get({ url:'', data:'key=value&key=value', success:function (result) { console.log(result); } }); //$.post $.post({ url:'', data:'key=value&key=value', success:function (result) { console.log(result); } }); //在使用jQuery中ajax發送請求的時候,只須要在 dataType中寫上jsonp便可實現ajax的跨域請求 dataType:'jsonp'
經過XHR實現ajax通訊的一個主要限制(相同域,相同端口,相同協議),來源於跨服安全策略,默認狀況下,XHR只能請求同一域的資源,這是爲了防止某些惡意的行爲.web
服務器端對於CORS的支持,主要就是經過設置Access-Control-Allow-Origin來進行的。ajax
<script>
元素來使用,src屬性知道一個跨域URL,JSONP是有效的JavaScript代碼,瀏覽器能夠跨域請求JS文件.缺點:1.JSONP是從其餘域加載代碼執行,存在不安全風險.2.很差肯定JSONP請求是否成敗.json
var img = new Image(); img.onload = img.onerror = function (){ alert("Done!"); }; img.src = "";