2013-10-28 26 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

相关问题