2014-07-14 53 views
4

如何可以jQuery $ .get,$ .post並獲得期望的結果,但角度不能$ http.get, $ http.post?爲什麼起源策略不適用於angular而是用於jquery?

Laravel後端,棱角前端。我正在考慮只使用jQuery,因爲它不會阻止CRUD操作在客戶端發生。

我配置$ http和$ httpProvider ...

.run(function($http){ 
    $http.defaults.headers.common['Access-Control-Allow-Origin'] = "*"; 
    $http.defaults.headers.common['Access-Control-Allow-Methods'] = "GET, POST, PUT, DELETE, OPTIONS"; 
    $http.defaults.headers.common['Access-Control-Allow-Headers'] = "Authorization"; 
}) 
.config(function($httpProvider) { 
    $httpProvider.defaults.useXDomain = true; 
}) 

而且laravel正在發回相應的頭......

App::after(function($request, $response) 
{ 
    // header('Access-Control-Allow-Origin', '*'); 
    $response->headers->set('Access-Control-Allow-Origin', '*'); 
}); 

那麼奇怪的是角$ HTTP不能得到任何東西從服務器返回,併產生這個錯誤:

XMLHttpRequest cannot load http://0.0.0.0:8000/api/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. 

但jQuery的$不用彷徨和$。員額工作correc TLY!

$.post('http://0.0.0.0:8000/api/test', function(resp){ 
    console.log(resp); 
}); 

我在做什麼錯在這裏?

+1

+1不知道要失敗的,爲什麼downvotes,這不是典型的xDomain問題 – charlietfl

+0

是你的jQuery從localhost:9000(角度相同的地方)運行,或者它在哪裏? – Dinesh

+0

您是否嘗試過使用其他瀏覽器?如果控制檯上有關於錯誤的更多信息,您是否也可以發佈它? – Dinesh

回答

1
.config(['$httpProvider', function($httpProvider) { 
     $httpProvider.defaults.useXDomain = true; 
     delete $httpProvider.defaults.headers.common['X-Requested-With']; 
    } 
]); 

只設置useXDomain爲true是不夠的。 AJAX請求也會與X-Requested-With標題一起發送,這表明它們是AJAX。刪除頭是必要的,所以服務器不拒絕傳入的請求。 filters.php內

嘗試添加此:

App::before(function($request) 
{ 
    if (Request::getMethod() == "OPTIONS") { 
     $headers = array(
     'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE', 
     'Access-Control-Allow-Headers'=> 'X-Requested-With, content-type, Authorization',); 
     return Response::make('', 200, $headers); 
    } 
}); 

它可能在飛行前請求

+0

不起作用,不幸的是... –

+0

在Angular中沒有'useXDomain'這樣的東西。它從未成爲Angular代碼。 https://github.com/angular/angular.js/issues/2956 –

相關問題