angularjs解决跨域问题

首先我来声明一下“跨域”这个问题都有哪些类型:

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。

下表给出了相对http://store.company.com/dir/page.html同源检测的结果:

angularjs解决跨域问题_第1张图片

我主要使用的是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"
        }
    ]
}

但是在浏览器中总是出现错误:



Uncaught SyntaxError: Unexpected token :

一开始我以为是我的json格式错误,后来验证后是正确的,最后使用这个解决办法解决掉这个问题,在sites.php文件中的json数据中添加一个函数angular.callbacks._0(json);

json数据要放到此方法中才可以正确返回。

这个跨域问题花了我一天的时间才得以解决,还是请大神帮忙解决的,真的是效率太低,希望可以有效学习。

你可能感兴趣的:(angularjs解决跨域问题)