AJAX总结
- 电脑系统 windows10 专业版
- 在开发的过程中,咱们依据需要可能会应用到 ajax,上面是我对ajax的一些总结,心愿对大家有所帮忙!
作用:部分异步刷新网页
- 异步申请:申请数据的时候不会影响页面的其余操作
- 申请分两种
- 异步
- 同步
- 前后端交互的形式
1、form(表单提交):
2、标签拜访(src href)
3、AJAX
AJAX的同步申请步骤
1、创立申请对象
var xhr; if(window.XMLHttpRequst){ xhr=new XMLHttpRequst(); }else{ //IE 5 6 7兼容 xhr=new ActiveXObject('Microsoft.XMLHTTP'); }
2、启动申请
open(参数一,参数二,参数三):用于设置申请形式和地址
参数一:申请形式
参数二:申请的url
参数三:是否异地发送,默认为true(异地),false为同步
留神:open()的办法只是设置相干的申请信息,并不会真正发动申请
//同步申请 xhr.open('get',"http://localhost/self/AJAX-1/server.php?un=" + $("#user")\[0\].value + "&ps=" + $("#pass")[0].value",false); //异步申请 xhr.open('post',"",true)
3、发送申请
send() 发送申请
参数要传输给后盾的数据,如果是get申请参数为null(不倡议省略该参数,低版本火狐浏览器会报错)
xhr.send(null);
4、申请胜利之后
status:http申请状态码
1XX:信息类状态,收到申请,正在解决
2XX:胜利类状态,胜利解决实现
3XX:重定向类状态,求情地址发生变化(304代表读缓存文件)
4XX:客户端谬误,
5XX:服务器端谬误,服务器辨认不出信息,不能对申请作出解决
//同步申请 if(xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status){ responseText//作为响应主体反映(后盾返给咱们的数据) responseXML//如果响应的数据类型为text/xml或者application/xml,此属性中保留 //后盾传输进来的数据 }
异步申请
readyState:申请的状态
属性值
1,代表申请建设,还没有收回去
2,代表申请曾经发送,正在解决中
3,代表申请解决中,曾经拿了局部数据
4,代表申请实现,拿到了全副数据
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status >=200 && xhr.status < 300 || xhr.status == 304){ //申请胜利 console.log(xhr.responseText) }else{ console.log('申请失败'); } } }
AJAX的异步申请步骤
1、创立申请对象
var xhr; if(window.XMLHttpRequst){ xhr=new XMLHttpRequst(); }else{ //IE 5 6 7兼容 xhr=new ActiveXObject('Microsoft.XMLHTTP'); }
2、设置申请
//同步申请 xhr.open('get',"http://localhost/self/AJAX-1/server.php",false); //异步申请 xhr.open('post',"http://localhost/self/AJAX-1/server.php")
3、设置申请头
xhr.setRequestHeader('CONTENT-TYPE','application/x-www-form-urlencoded');
4、发动申请
var parms="un"+$("#user")\[0\].value + "&ps=" + $("#pass")[0].value; //un=123&ps=123 xhr.send(parms);
5、解决数据
//同步申请 if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ console.log(xhr.responseText); }else{ console.log('申请失败'); }
异步申请
xhr.onreadystatechange = function() { if (4 == xhr.readyState) { if (xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status) { // 申请胜利 $("#showDiv")\[0\].innerHTML = xhr.responseText; } else { // 申请失败 $("#showDiv")[0].innerHTML = "申请失败"; } } }
AJAX跨域
同域:协定、域名、端口号 完全一致称为同域。
协定:http,https
域名:一级域名,二级域名,三级域名(数字越大范畴越大)
端口号:8080,443等
https://www.oa.liangzi.com:8080
https: 协定
oa:三级域名
liangzi:二级域名
com: 一级域名
同源策略:
JS规定,协定,域名,端口号 统一即为同域(同源),能够互相拜访,即便前面的门路不雷同,也是同源
为什么要有同源策略?
避免黑客通过JS脚本,歹意获取用户的账户和明码(例如:通过 iframe 仿造银行网页)
跨域:
前端通过AJAX向服务器申请数据时,都须要思考和留神跨域问题
留神:只有JS中的AJAX才须要思考跨域,像 <img>,<link>,<script>,<iframe>, 等标签不必跨域,然而浏览器限度了他们的权限(例如:获取 iframe 中同源页面的内容,也会跨域)
有三种跨域的形式
第一种 :前端拿不同域的后盾数据(jsonp)
第二种:前端拿不同域的前端的数据(postMessage)
jsonp:
1、创立script标签
2、批改标签的src
3、增加到body中
4、从body中删除
btn.onclick=function(){ //jsonP // 1、创立标签 var scriptM=document.createElement('script'); // 2、批改src scriptM.src='http://localhost/self/AJAX-2/...'; // 3、增加标签 document.body.appendChild(scriptM); // 4、删除标签 document.body.removeChild(scriptM); } //后盾来回调的内容 function sucFun(data){ console.log(data); }
postMessage:
postMessage 形式进行跨域是 HTML 5 新增的跨域技术
应用场景:
A 页面中有 iframe,iframe 中援用的是非同源 B 页面.此时想要 A 和 B 两个页面互相通信的话,就会引起跨域,可通过postMessage实现信息跨域
A页面
oneBtn.onclick = function() { // postMessage oneiFrame.contentWindow.postMessage("hello", "http://localhost:8080"); }
B页面
window.onmessage = function(event){ var even=event || window.event; switch (even.data){ case 'hello': document.body.style.background='red'; break; default: break; } }
相互配合实现跨域
//本期对ajax总结到了这里就完结啦,是不是很简略,让咱们一起致力走向巅峰!