2013-10-28 24 views
0

我試圖從一個使用Angular JS的web服務得到響應,我可以通過我的shell使用簡單的curl命令完全實現:

curl --header "Content-type: application/json" --request POST 
    --data '{"username": "name", "password": "pwd"}' 192.168.2.1:9000/ws/login 


但是,當我嘗試使用Angular與$http.post達到它時,我會遇到一些「有趣」的行爲。

雖然我的數據是:

var url = "192.168.2.1:9000/ws/login" 
    var postData = { 
     username: un, 
     password: pwd 
    } 


我都試過postData作爲一個JSON對象,並作爲一個字符串化JSON

使用電話這樣的:

$http.post(url, postData). 
     success(function(data) { 
     console.log(data) 
     }). 
     error(function(data, status, headers, config) { 
      console.log(data, status, headers, config) 
     }) 

或甚至

$http({ 
     url: url, 
     method: 'POST', 
     data: JSON.stringify(postData), 
     headers: {'Content-type': 'application/json'} 
     }). 
     success(function(data, status, headers, config) { 
      console.log('Success: ', data, status, headers, config) 

     }). 
     error(function(data, status, headers, config) { 
      console.log('Error: ', data, status, headers, config) 

     }) 

什麼都不做。
一點都沒有!


前置一個 http://的網址,而不是,給我:

OPTIONS http://192.168.2.1:9000/ws/login 404 (Not Found) angular.js:7073 
OPTIONS http://192.168.2.1:9000/ws/login Origin http://localhost:9000 is not allowed by Access-Control-Allow-Origin. 

我真的真的失去了...任何建議,將不勝感激!

+0

如果您在發佈帖子的同一個框中本地運行服務器,該怎麼辦?你有沒有嘗試過不添加'header'? –

+1

我想你自己回答了這個問題... 選項http://192.168.2。1:9000/ws/login訪問控制 - 允許來源不允許原始http:// localhost:9000。 當您的角度應用在http:// localhost:9000上運行時,您的Web服務運行在http://192.168.2.1:9000上。您無法將AJAX請求發送到其他站點(scheme:host:port的組合)。在這裏閱讀更多: https://en.wikipedia.org/wiki/Same-origin_policy 你可能需要做這樣的事情: http://better-inter.net/enabling-cors-in- angular-js/ – Adam

回答

1

我已經設法使CORS設置爲&運行。

因爲我們使用Play,所以我的服務器端並不是微不足道的!框架和現代瀏覽器在發送真正的POST方法之前發送一個OPTION方法,以便有些「預授權」發送CORS請求。

正如http://better-inter.net/enabling-cors-in-angular-js/說我有實際$http.post之前的

 $http.defaults.useXDomain = true; 

補充,但我並沒有刪除'Content-Type'


如果你曾經使用類似的設置,我會建議同時對這些資源看看:

Play 2.0.1 and setting Access-Control-Allow-Origin
Play! 2.0 easy fix to OPTIONS response for router catch-all?

0

亞當說過!

如果您使用的是Apache:

Header set Access-Control-Allow-Origin: http://domain.com, http://localhost/ 

或只是

Header set Access-Control-Allow-Origin: * 

執行此操作僅用於測試。對於生產,只能將您的域名限制在原來的範圍

+0

@Adam事實上,這是一個相同的問題,第一個404誤導我。 但是,我需要以某種方式處理這個問題,因爲我的情況不可能有Web服務和角度相同的服務器。 ATM我使用python SimpleHTTPServer來測試我的角度應用程序,但我懷疑我可以配置ORIGIN標題。 這是可能的壓制標題發送或類似的東西(亞當建議與Django)? – domokun

相關問題