Javascript和angularjs使用CORS

我试图从使用$ http的网站获取信息,并且我诚实地查看了所有的东西,并且尝试了很多不同的东西,但我不确定如何设置“Access-Control-Allow-Origin” 。 我不确定我是否完全是误解,但是任何帮助真的很感谢,谢谢提前一吨!

XMLHttpRequest无法加载http://nhlwc.cdnak.neulion.com/fs1/nhl/league/teamroster/NJD/iphone/cbrbroster.json 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 原因' http:// localhost:3000 '因此不被允许访问。 该响应具有HTTP状态码503。

这是我的代码:

来自rosterService的相关代码:

(function(){ 'use strict'; var URL = 'http://nhlwc.cdnak.neulion.com/fs1/nhl/league/teamroster/NJD/iphone/clubroster.json'; angular .module("DevilsFanApp") .factory("RosterService", RosterService); function RosterService($rootScope, $http) { function fetchPlayers(callback){ return $http({ method: 'GET', url: URL, dataType: 'jsonp' }); } } })(); 

server.js:

  var express = require('express'); var app = express(); var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; var port = process.env.OPENSHIFT_NODEJS_PORT || 3000; app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "http://localhost:3000"); // instead of * give a try with res.header('Access-Control-Allow-Methods', 'OPTIONS,GET,POST,PUT,DELETE'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); app.use(express.static(__dirname + '/public')); app.listen(port, ipaddress); 

config.js:

 (function(){ angular .module("DevilsFanApp") .config(Configure); function Configure($routeProvider,$httpProvider) { $routeProvider .when("/roster",{ templateUrl: "./views/roster/roster.view.html", controller: "RosterController" }) .otherwise({ redirectTo: "/home" }); } })(); 

我不知道这是否是您的编码问题的答案,但让我在这里清除一些事情。

这个代码你在这里

 var URL = 'http://nhlwc.cdnak.neulion.com/fs1/nhl/league/teamroster/NJD/iphone/clubroster.json'; angular .module("DevilsFanApp") .factory("RosterService", RosterService); function RosterService($rootScope, $http) { function fetchPlayers(callback){ return $http({ method: 'GET', url: URL, dataType: 'jsonp' }); } } 

它会打电话给位于“ http://nhlwc.cdnak.neulion.com/fs1/nhl/league/teamroster/NJD/iphone/clubroster.json ”这是一个托pipe的域名服务器,它可能有一个CORSconfiguration或不可以。

基本上,你不能从UI方面做任何事情来访问上面的URL的数据,除非你有权限或从后端configurationCORS的方式。


现在你有第二块代码:

 var express = require('express'); var app = express(); var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; var port = process.env.OPENSHIFT_NODEJS_PORT || 3000; app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); app.use(express.static(__dirname + '/public')); app.listen(port, ipaddress);` 

以上是您的networking上本地运行的本地nodejs服务器(端口:3000)。 在这里你已经configuration了CORS,任何对这个URL或从localhost:3000127.0.0.1:3000开始的任何其他URL的请求将能够从这个服务器(*在你的networking中)访问数据。


从上面的代码可以说,你得到的CORS的错误不是因为上面提到的GET API调用…而是来自访问服务器托pipe在http:// localhost:30000 。

另外我会build议你改变

 app.listen(port, ipaddress); //to app.listen(3000); 

上述变化保持了function的完整性,并且更易于理解。

您需要在服务器上启用CORS(localhost:3000)。 看看这个网站: http : //enable-cors.org/

服务器你的应用程序的侧CORS块:

 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "http://localhost:3000"); // instead of * give a try with res.header('Access-Control-Allow-Methods', 'OPTIONS,GET,POST,PUT,DELETE'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 

请参阅并安装http://npmjs.com/package/cors一个适合CORS情景处理的良好软件包。

你可以检查评论的post,为一些用户的经验和答案。