我正在開發一個AngularJS應用程序,它調用使用Play Framework 2.2.0開發的REST API。使用AngularJS調用Play 2 REST API(CORS問題)
我有一個與跨域AJAX調用相關的問題,因爲Angular應用程序和Play不會託管在同一個域中。
這裏是我的角度服務的JS調用:
$http
.post("http://localhost:9001/category/list", { langCode: 'fr-FR' })
.success(function(data, status, headers, config) {
callback(data.items);
})
.error(function(data, status, headers, config) {
console.log("Error Data : " + data);
console.log("Error Status : " + status);
});
這裏是我的播放應用程序的路徑:
POST /category/list controllers.catalog.ProductCategoryController.list()
- 如果我不發送任何數據請求,一切工作正常
- 如果我發送數據,我有關於ACCESS_CONTROL_ALLOW_ORIGIN,ACCESS_CONTROL_ALLOW_HEA的Ajax錯誤DERS
我唯一的解決方法是:在全球一流
攔截所有請求,並添加頁眉
@Override public Action onRequest(Request request, Method method) { return new Action.Simple() { @Override public Promise<SimpleResult> call(Context ctx) throws Throwable { Logger.debug("Intercepting request and applying CORS headers..."); ctx.response().setHeader(Controller.ACCESS_CONTROL_ALLOW_ORIGIN, "*"); ctx.response().setHeader(Controller.ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type"); return delegate.call(ctx); } }; }
添加另一條路線,在路線選項
OPTIONS /category/list controllers.catalog.ProductCategoryController.list()
有沒有一種方法使得集成更簡單?
這種解決方案比我的維護更感謝!我現在接受它,我們將看到框架將如何處理這個問題。 – c4k
哎@Damiya,當使用角度和播放框架將視頻上傳到'brightcove'時,我也面臨同樣的問題,但上面的解決方案對我來說並不合適。我的角碼如下:'url:'http://api.brightcove.com/services/post', header:{ 'Content-Type':file.type }, method:'POST',' –
它也不適合我 – Marin