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 = "";