当前位置: 首页 > 面试题库 >

如何使用angular.js-resource启用cors请求

余弘新
2023-03-14
问题内容

我有一个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中
对此进行了解释



 类似资料:
  • 每次对服务进行PUT Ajax调用时,它都会返回以下错误: 用于处理所有选项请求控制器:

  • 如何使用cURL调试CORS请求?到目前为止,我找不到任何“模拟”飞行前请求的方法。

  • 总之,我使用了一个类似dicom文件api的查看器,称为基石,为此我连接到dc4chee的WADO服务来获取dicom,dcm4chee运行端口8080,而我在node上的应用程序使用端口3000,所以我试图显示浏览器的dicom。 在这里也使用npm cors代码 但是我启用了端口3000而不是8080上的cors,我需要在头响应中激活或添加“Access-Control-Allow-Origi

  • 问题内容: 我使用Flickr照片搜索API的JavaScript创建了一个演示。现在,我将其转换为AngularJs。我在互联网上搜索,发现下面的配置。 组态: 服务: 控制器: 问题答案: 你不知道 您请求的服务器必须实现CORS才能从您的网站访问权限中授予JavaScript。您的JavaScript无法授予自己访问其他网站的权限。

  • 问题内容: 我正在尝试使用jquery提出跨源请求,但它一直被消息拒绝 XMLHttpRequest无法加载http:// …请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不能访问Origin…。 我正在使用flask,heroku和jquery 客户端代码如下所示: 在heroku方面,我正在使用flask,就像这样 问题答案: 当我部署到Heroku

  • 我已经使用JavaScript为Flickr照片搜索API创建了一个演示。现在我把它转换成AngularJs。我在网上搜索了一下,找到了下面的配置。 配置: 服务: 控制器: 但是我仍然得到了同样的错误。以下是我尝试过的一些链接: XMLHttpRequest无法加载URL。访问控制不允许原点允许原点 http://goo.gl/JuS5B1