Ajax是浏览器提供的一套,可以向服务端发送、获取,实现无刷新、动态获取数据的API,是Asynchronous Javascript And XML(异步 JavaScript 和 XML)的缩写;Ajax核心对象是XMLHTTPRequest对象,一个完整的Ajax请求可分为五步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//Ajax的get请求 var xhr = new XMLHTTPRequest();//1.创建请求实例 xhr.open('GET','test.php',true)//2.搭建通信;第三个参数是异步还是同步一般不用写,默认是true异步 xhr.send();//3.发送请求 xhr.onreadystatechange = function (){//4.监听状态 if(this.readyState === 4 & this.status === 200){ console.log(this.responseText)//5.获取响应 } } //Ajax的post请求 var xhrp=new XMLHttpRequest(); xhrp.open("POST",'test.php'); xhrp.setRequestHeader('Content-Type', 'application/json');//post必须设置请求头 xhrp.send(); xhrp.onreadystatechange=function(){ if (this.readyState === 4) { console.log(this);//实例化的ajax console.log(this.status);//获取响应状态码 console.log(this.statusText);//获取响应状态描述 console.log(this.getResponseHeader('Content-Type'));//获取指定响应头信息 console.log(this.getAllResponseHeaders())//获取全部响应头 console.log(this.responseText);//获取响应体 console.log(this.response)//也是获取响应体但是他可以接受更多形式比如计算机二进制的响应;可以设置xhrp.responseType的属性来获取;但是兼容性不是很好 console.log(this.responseXML);//获取XML形式的响应体 } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//自己封装JS中Ajax function ajax(method,url,data,callback){ method=method.toUpperCase();//大写请求方式 if ((typeof data)==='object') {//处理参数data为对象的时候 var ll=[]; for(var key in data){ var item=key+'='+data[key]; ll.push(item); } data=ll.join('&');//将数组以&拼接为一个字符串输出 } ////get方式发送的请求写在url中;并令data为null method==='GET'? (url+='?'+data)&(data=null):null; var xhr=new XMLHttpRequest(); xhr.open(method,url); //post方式时需要设置请求头 method==="POST"? xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode'):null; xhr.send(data); xhr.onreadystatechange=function(){ if (this.readyState === 4 & this.status === 200) { callback(this.responseText); } } } |
JQ中将Ajax封装成了ajax对象,极大的简化了发送网络请求的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//底层封装 $.ajax({ url:'test.php', type:'post', dataType:'json', headers:{ "Content-Type":"application/json" }, data:{name:222,age:333}, /*beforeSend:function(xhr){//发送请求之前执行 console.log('beforeSend'); console.log(xhr.readyState);//在open之前;状态是0 },*/ success:function(data){//请求成功的时候执行 console.log(data); }/*, error:function(err){//错误的时候执行 console.log(err.status) }, complete:function(){//不管成功与否都执行 console.log('complete') }*/ }) //jsonp跨域请求 $.ajax({ url:'http://localhost/cors.php', dataType:'jsonp',//只用将dataType设置为jsonp就行 data:{'ooo':888,'sss':'ccc'}, success:function(res){ console.log(res); } }) //高级封装$.get(url,data,callbackm,type) $.get('test.php',{name:222,value:333},function(data){ console.log(data,'这是get方法'); },'json'); $.post('test.php',{name:222,value:333},function(data){ console.log(data,'这是post方法'); },'json'); $.getJSON('test.php',{name:666},function(data){ console.log(data,'这是getJSON方法'); }); //全局AJAX事件 $(function(){//(ajaxStart, ajaxStop, ajaxSend, ajaxComplete, ajaxError, and ajaxSuccess)1.只能在document元素上触发2.需要提前配置 $(document).ajaxComplete(function(){ console.log('this is global complete') }); $(document).ajaxError(function(){ console.log('this is global error') }); $(document).ajaxSuccess(function(){ console.log('this is global success') }); $(document).ajaxStart(function(){ console.log('this is global start') }); $(document).ajaxStop(function(){ console.log('this is global stop') }); $('#sss').on('click',function(){ $.post('test.php',{kkk:211},function(res){ console.log(res) }); }); }); |