这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。
下表给出了相对http://store.company.com/dir/page.html同源检测的结果:
我主要使用的是angularjs框架,所以使用了以下这个方法:
var app = angular.module('myApp',[]);
app.controller('siteCtrl',function($scope,$http) {
$http({
method: 'JSONP',
url: 'http://127.0.0.1/sites.php?callback=JSON_CALLBACK',
}).success(function(response) {$scope.names = response.sites;});
});
实现了跨域问题解决,但是我又遇到了一个问题,本地中的sites.php文件中是json数据,而我的json数据格式是没有问题的,如下:
{
"sites" : [
{
"Name": "菜鸟教程",
"Url": "www.runoob.com",
"Country": "CN"
},
{
"Name": "baidu",
"Url": "www.baidu.com",
"Country": "CN"
},
{
"Name": "sina",
"Url": "www.sina.com",
"Country": "CN"
},
{
"Name": "微博",
"Url": "www.weibo.com",
"Country": "CN"
}
]
}
但是在浏览器中总是出现错误:
一开始我以为是我的json格式错误,后来验证后是正确的,最后使用这个解决办法解决掉这个问题,在sites.php文件中的json数据中添加一个函数angular.callbacks._0(json);
json数据要放到此方法中才可以正确返回。
这个跨域问题花了我一天的时间才得以解决,还是请大神帮忙解决的,真的是效率太低,希望可以有效学习。