Javaweb Homework
程序员文章站
2022-06-02 12:42:39
...
⚪绝对路径或者相对路径都可以。服务器访问的地址都会转化为绝对地址。
⚪跨域问题来源于浏览器的同源策略,浏览器为了提高网站的安全性,在发送ajax请求时,只有在当前页面地址与请求地址的协议+域名+端口号相同时才允许访问,否则会被拦截。
方法一、通过jsonp跨域
JSONP包含两部分:回调函数和数据。
回调函数:当响应到来时要放在当前页面被调用的函数。
数据:就是传入回调函数中的json数据,也就是回调函数的参数了。
/*handleResonse({"data": "zhe"})*/
function handleResponse(response){
console.log('The responsed data is: '+response.data);
//处理获得的Json数据
}
var script = document.createElement('script');
script.src = 'http://www.example.com/data/?callback=handleResponse';
document.body.insertBefore(script, document.body.firstChild);
--------------------------
//2、手动生成script标签
function handleResponse(response){
console.log('The responsed data is: '+response.data);
//处理获得的Json数据
}
<script src="http://www.example.com/data/?callback=handleResponse"></script>
--------------------------
//3、使用jQuery进行jsonp操作
//jquery会自动生成一个全局函数来替换callback=?中的问号,之后获取到数据后又会自动销毁
//$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。
<script>
$.getJson('http://www.example.com/data/?callback=?',function(jsondata){
//处理获得的Json数据
});
</script>
方法二、通过document.domain+iframe来跨子域
在不同的框架之间(父子或同辈),是能够获取到彼此的window对象的,但不能使用获取到的window对象的属性和方法(html5中的postMessage方法是一个例外),总之,你可以当做是只能获取到一个几乎无用的window对象。
// http://www.example.com/a.html 页面中
<script>
function onLoad(){
var iframe = document.getElementById('iframe');
var win = iframe.contentWindow;
//这里能够获取到iframe中的window对象,但是window对象的属性和方法几乎不可用。
var doc = win.document;//这里获取不到iframe中的document对象
var name = win.name;//这里获取不到window对象的name属性
······
}
<iframe id = "iframe" src ="http:// example.com/b.html" onload = "onLoad()"></iframe>
方法三、使用window.name+iframe来进行跨域
window的name属性特征:name 值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB),即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面window.name都有读写的权限。
<script>
window.name = "哈哈,我是页面a设置的值哟!";
//设置window.name的值
setTimeout(function(){
window.location = 'b.html';
},3000);//3秒后把一个新页面载入当前window
</script>
上一篇: Homework System