2015-03-25 38 views
0

我正在開發一個小應用程序使用angularJS。 html頁面是本地文件,不會在Web服務器上部署。我定義了一個服務模塊,它將調用遠程webapi來獲取json數據,但是我的成功回調不會被調用。

$http({ method: 'GET', url: remoteServiceUri }). 
 
success(function (data, status) { 
 
var response = data; 
 
}). 
 
error(function (data, status) { 
 
var error = data; 
 
});

它總是調用到錯誤的方法。我該如何解決這個問題? 我可以證實,服務api工作正常,因爲我試圖在同一網站上部署頁面和webapi,在這種情況下,它的工作原理。

是由交叉域或所需的任何配置造成的? 謝謝。

+0

確實給預檢OPTIONS請求遠程服務回覆? – lucassp 2015-03-25 08:37:10

回答

0

您需要配置遠程Web服務來處理預檢選項請求。

您的Web服務必須添加以下標題到預檢OPTIONS請求的響應,以及實際的請求:

{ 
    "Access-Control-Allow-Origin": "*", 
    "Access-Control-Expose-Headers": "Content-Type", 
    "Access-Control-Allow-Methods": "GET,POST,PUT,DELETE,OPTIONS", 
    "Access-Control-Allow-Headers": "Content-Type" 
} 

你可以找到詳細瞭解其需要什麼樣的頭,並且它們意味着什麼這裏:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

謝謝。它更新webapi以支持CORS後可用。我更新web.config中添加:<! - 添加以下自定義的HTTPHeader將有助於防止CORS從停止請求 - > <添加名稱=「訪問 - 控制 - Allow-Origin「value =」*「/> jamie2015 2015-03-25 10:00:38

+0

不客氣。但是,正如Yair所說,爲了開發目的,您始終可以使用代理。 – lucassp 2015-03-25 10:02:53

0

如果您使用的是Apache,您可以使用proxypass重定向請求。這樣您的角度應用程序會與您的apache服務器進行「本地」對話,並將請求傳遞到不同的域。

例如,在httpd.conf集:

ProxyPass /foo http://foo.example.com/bar 

在您的角度應用的通話

$http({ method: 'GET', url: "/foo/action" }).then(...); 

你的Apache將翻譯 「/富/行動」,以 「http://foo.example.com/bar/action」。 再見跨域問題!

欲瞭解更多信息,請參閱apache proxy module

+0

嘿@Yair,我認爲你的解決方案是做到這一點的最佳方式! 但我沒有在我的項目(Ecplise上的Apache)上找到httpd.conf文件,你有一個想法如何找到它? – Ayyoub 2015-07-15 09:14:34

+0

您應該在安裝apache的文件夾中查找它,如果必須搜索整個計算機。 – 2015-07-16 06:36:54