本文为收集网上的跨域问题加以整理。
1、CORS(跨域资源共享,Cross-Origin Resource Sharing)
这种方法是使用ajax请求跨域资源,因为同源策略问题,正常不允许访问,只需要在请求的服务器响应的头信息中添加
response.addHeader("Access-Control-Allow-Origin","http://127.0.0.1"); //请求IP地址为127.0.0.1 response.addHeader("Access-Control-Allow-Origin","*"); //不限制IP
2、动态创建<script>标签
script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签
var script = document.createElement('script'); script.src = "http://aa.xx.com/js/*.js"; document.body.appendChild(script);
3、JSONP
这种方法其实是JQuery对动态创建<script>标签的一种封装
封装方法一:
$.ajax({
async:false,
url: http:127.0.0。1,//跨域的访问地址
type: "GET",
dataType: 'jsonp',
jsonp: 'jsoncallback',
data: qsData,
timeout: 5000,
beforeSend: function(){
//jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
},
success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
if(json.actionErrors.length!=0){
alert(json.actionErrors);
}
genDynamicContent(qsData,type,json);
}
});
封装方法二(高级封装):
$.getJSON(" http://跨域的dns/document!searchJSONResult.action?name1="+value1+"&jsoncallback=?",
function(json){
if(json.属性名==值){
// 执行代码
}
});
4、通过设置document.domain
这种方法只适合解决子域不同的跨域问题