我有一个angular.js应用程序,我需要做CORS请求。
我想使用以下角度资源定义我的休息服务“角度”:http : //docs.angularjs.org/tutorial/step_11。
但是我还没有找到一种方法来使它工作。在google上,我找到了以下示例代码:http : //jsfiddle.net/ricardohbin/E3YEt/,但这似乎不适用于angular- resources。
这是我的app.js
'use strict'; angular.module('corsClientAngularApp', ['helloServices']) .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl' }) .otherwise({ redirectTo: '/' }); });
这是我的services.js和其余的服务
angular.module('helloServices', ['ngResource']). factory('Hello', function($resource){ return $resource('http://localhost:8080/cors-server/hello/:name', {}, { query: {method:'GET', params:{name:'name'}, isArray:false} }); });
这是我的main.js和使用$ http的控制器,这有效!
'use strict'; angular.module('corsClientAngularApp') .controller('MainCtrl', function ($scope, $http, Hello) { $http.defaults.useXDomain = true; $http.get('http://localhost:8080/cors-server/hello/stijn') .success(function(data) { $scope.hello = data; }); });
这是我使用角度资源的main.js的另一个版本。这不起作用:(
'use strict'; angular.module('corsClientAngularApp') .controller('MainCtrl', function ($scope, $http, Hello) { $http.defaults.useXDomain = true; $scope.hello = Hello.query({name:'stijn'}); });
这是工作请求的标题(来自chrome devtools):
Request URL:http://localhost:8080/cors-server/hello/stijn Request Method:OPTIONS Status Code:200 OK Request Headers Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 Access-Control-Request-Headers:accept, origin, x-requested-with Access-Control-Request-Method:GET Cache-Control:max-age=0 Connection:keep-alive Host:localhost:8080 Origin:http://localhost:9000 Referer:http://localhost:9000/ User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 Response Headers Access-Control-Allow-Headers:accept, origin, x-requested-with Access-Control-Allow-Methods:GET Access-Control-Allow-Origin:* Content-Length:0 Date:Thu, 25 Apr 2013 10:42:34 GMT Server:Apache-Coyote/1.1
这些是NOt工作请求中的标头:
Request URL:http://localhost/cors-server/hello/stijn Request Method:OPTIONS Status Code:200 OK Request Headers Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 Access-Control-Request-Headers:accept, origin, x-requested-with Access-Control-Request-Method:GET Cache-Control:max-age=0 Connection:keep-alive Host:localhost Origin:http://localhost:9000 Referer:http://localhost:9000/ User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 Response Headers Allow:GET,HEAD,POST,OPTIONS,TRACE Connection:Keep-Alive Content-Length:0 Content-Type:text/plain Date:Thu, 25 Apr 2013 10:41:12 GMT Keep-Alive:timeout=5, max=100 Server:Apache/2.2.22 (Win32)
使用angular-resources时,请求网址似乎是错误的。但为什么?
谢谢!
$resource使用冒号作为参数接受的URL 。因此,在url中使用port时,您需要将冒号转义为port。在$ resource docs中对此进行了解释
$resource