<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> var message = function(data) { alert(data[1].title); }; </script> <script type="text/javascript" src="http://web.cn/js/message.js"></script> </head> <body> <div id='testdiv'></div> </body> </html>
远程的message.js文件是
message([ {"id":"1", "title":"天津新闻联播,雷人搞笑的男主持人"}, {"id":"2", "title":"楼市告别富得流油 专家:房价下跌是大概率事件"}, {"id":"3", "title":"法国人关注时事 八成年轻人每天阅读新闻"}, {"id":"4", "title":"新闻中的历史,历史中的新闻"}, {"id":"5", "title":"东阳新闻20140222"}, {"id":"6", "title":"23个职能部门要增加新闻发布频次"}, {"id":"7", "title":"《贵州新闻联播》 中国美丽乡村"}, {"id":"8", "title":"朝韩离散家属团聚首轮活动结束"}, {"id":"9", "title":"索契冬奥会一天曝出两例兴奋剂事件"}, {"id":"10", "title":"今天中国多地仍将出现中度霾"} ]);
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> var messagetow = function(data){ alert(data); }; var url = "http://192.168.31.137/train/test/jsonpthree?callback=messagetow"; var script = document.createElement('script'); script.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(script); </script> </head> <body> </body> </html>
$.ajax({ url:'http://192.168.31.137/train/test/testjsonp', type : 'get', dataType : 'text', success:function(data){ alert(data); }, error:function(data){ alert(2); } });
那么在浏览器中会报错:
jsonp形式的ajax请求:并且通过get请求的方式传入参数,注意:跨域请求是只能是get请求不能使用post请求
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="./js/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ var name = 'chenshishuo'; var sex = 'man'; var address = 'shenzhen'; var looks = 'handsome '; $.ajax({ type : 'get', url:'http://192.168.31.137/train/test/testjsonp', data : { name : name, sex : sex, address : address, looks : looks, }, cache :false, jsonp: "callback", jsonpCallback:"success", dataType : 'jsonp', success:function(data){ alert(data); }, error:function(data){ alert('error'); } }); }); </script> </head> <body> <input id='inputtest' value='546' name='inputtest'> <div id='testdiv'></div> </body> </html>
jsonp 传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback 自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
看看请求头和相应头吧
请求头:jquery会自动带入callback参数,当服务端获取到这个参数后,返回回来.(响应头)
现在是不是明白了跨域的基本原理,和基本的使用方法呢??
上面我们说到img中的src可以自动调用远程图片的(这个比较简单我在这里就不说了)
还有ifram请求:
基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com 这种特点,
也就是两个页面必须属于一个基础域(例如都是xxx.com),使用同一协议和同一端口,这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数
要点就是 :通过修改document.domain来跨子域
demo4: 通过iframe来跨子域
http://a.study.cn/a.html 请求 http://b.study.cn/b.html
在a.html:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> document.domain = 'study.cn'; function test() { alert(document.getElementById('a').contentWindow); } </script> </head> <body> <iframe id='a' src='http://b.study.cn/b.html' onload='test()'> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> document.domain = 'study.cn'; </script> </head> <body> 我是b.study.cn的body </body> </html>
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did219