AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?

AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?
什么是ajax:是异步javascript和xml
ajax是用于创建快速网页技术
通过在后台和服务器金星号少量数据交互,通过异步更新,实现页面的局部更新
同步:等待页面回复完再继续
异步:页面继续与进程处理可能的回复
交换流程
1,创建xhr
2,open打开异步通道,设置异步请求true为异步请求
3,send发送数据
4,判断readystate==4;HTTP请求在200,300之间或者304数据请求成功
跨域技术
什么是跨域
可以通信:同一域名,同一域名下的不同文件
可以不通信:1,同一域名,不同端口
2,同一域名,不同协议。
3,域名和域名对应的ip
4,http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同
5,http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上)
6,http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名
1.document.domain+iframe的设置(主域相同,子域不相同)
wwww.a.com上的a.html
document.domain+ifame
document.domian='a.com';
var ifr=document.createElement('iframe');
ifr.src='http://script.a.com/b.html';
ifr.style.display='none';
document.body.appendChild(ifr);
ifr.onload=function(){
var doc = ifr.contentDocument || ifr.contentWindow.document;
// 在这里操纵b.html
alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
}
script.a.com上的b.html
document.domain='a.com'
2,jsonp(ison+padding)box({name:ve;}),通过回调函数在另一个文件中写函数
function createjs(surl){
var oScript=documnet.createElement('script');
oScript.type='text/javascript';
oScript.src=surl;
document.getElementsByTagName('heade')[0].appendChild(oScript);
}
createjs('jsonp.js?callback=box');
function box(json){
alert(json.name);
}
1350*3=405
3,location.hash
parent.location.hash
yyy.html#
parent.location.hash=self.location.hash;
<iframe src='xxx.php#key1=value1&key2=value2'></iframe>
ie、chrome的安全机制无法修改parent.location.hash,要利用一个中间的cnblogs域下的代理iframe

4,window.name
name 在浏览器环境中是一个全局/window对象的属性,且当在 frame 中加载新页面时,name 的属性值依旧保持不变。
通过在 iframe 中加载一个资源,该目标页面将设置 frame 的 name 属性。此 name 属性值可被获取到,以访问 Web 服务发送的信息。
但 name 属性仅对相同域名的 frame 可访问。这意味着为了访问 name 属性,当远程 Web 服务页面被加载后,必须导航 frame 回到原始域。
同源策略依旧防止其他 frame 访问 name 属性。一旦 name 属性获得,销毁 frame
有个代理界面
有三个页面页面
1,a.com/app.html;应用页面
2,a.com/proxy.html代理文件
3,b.com/data.html数据页面

5,html5 postmessage
a.com/index.html中的代码
<iframe id='ifr' src='b.com/index.html'></iframe>
window.onload=function(){
var ifr=document.getElementById('ifr');
var targetOrigin='http://b.com';
ifr.contentWindow.postMessage('i was there',targetOrigin)
}
b.com/index.html中的代码
window.addEventListener('message',function(event){
if(event.origin=='http://a.com'){
alert(event.data);
}
},false);

原文地址:https://www.cnblogs.com/yayaxuping/p/4433050.html