2013-04-25 24 views
13

Tôi có một ứng dụng angular.js và tôi cần thực hiện yêu cầu CORS.Cách bật yêu cầu cors với angular.js-resource

Tôi muốn xác định các dịch vụ còn lại của mình "góc cạnh" bằng tài nguyên góc, được mô tả tại đây: http://docs.angularjs.org/tutorial/step_11.

Nhưng tôi chưa tìm được cách để làm việc này. Trên google tôi đã tìm thấy mã mẫu sau: http://jsfiddle.net/ricardohbin/E3YEt/, nhưng điều này dường như không hoạt động với tài nguyên góc.

đây là app.js tôi

'use strict'; 

angular.module('corsClientAngularApp', ['helloServices']) 
    .config(function ($routeProvider) { 
    $routeProvider 
     .when('/', { 
     templateUrl: 'views/main.html', 
     controller: 'MainCtrl' 
     }) 
     .otherwise({ 
     redirectTo: '/' 
     }); 
    }); 

đây là services.js của tôi với các dịch vụ còn lại

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} 
    }); 
}); 

Đây là main.js của tôi với bộ điều khiển bằng cách sử dụng $ http, tác phẩm này !:

'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; 
     }); 
    }); 

Đây là phiên bản khác của main.js sử dụng tài nguyên góc cạnh. Này không làm việc :(

'use strict'; 

angular.module('corsClientAngularApp') 
    .controller('MainCtrl', function ($scope, $http, Hello) { 
    $http.defaults.useXDomain = true; 
    $scope.hello = Hello.query({name:'stijn'}); 
    }); 

Đây là là những tiêu đề từ yêu cầu làm việc (từ DevTools chrome):

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 

Và đây là những tiêu đề từ yêu cầu không làm việc:

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) 

Dường như url yêu cầu không đúng khi sử dụng tài nguyên góc. Tuy nhiên, tại sao?

Cảm ơn S!

+0

'KHÔNG hoạt động' không phải là định nghĩa của sự cố. Kiểm tra yêu cầu trong bảng điều khiển trình duyệt và cung cấp thêm chi tiết – charlietfl

+0

Tôi đã thêm tiêu đề yêu cầu – cremersstijn

Trả lời

7

URL cho $resource chấp nhận sử dụng dấu hai chấm cho thông số. Do đó khi sử dụng cổng trong url bạn cần phải thoát khỏi dấu hai chấm cho cổng. Điều này được giải thích trong $resource docs

+0

Đã hoạt động, nhưng giờ tôi nhận được "{" 0 ":" h "," 1 ":" e "," 2 ":" l ", "3": "l", "4": "o", "5": "", "6": "s", "7": "t", "8": "i", "9" : "j", "10": "n"} "thay vì" hello stijn ". Lam sao tôi co thể sửa no? – cremersstijn

+3

@cremersstijn $ resource mong đợi một đối tượng có thuộc tính được trả về. Nó xâu chuỗi của bạn vào đối tượng đó bằng cách gán từng vị trí ký tự làm thuộc tính với ký tự làm giá trị. – c0bra

+2

nơi chính xác trong tài liệu tài nguyên, thoát cổng được mô tả? –

Các vấn đề liên quan