Angular JS - 使用$ http.post无法接收任何响应

时间:2013-10-28 17:42:18

标签: javascript json angularjs cors angular-http

我正在尝试使用Angular JS从Web服务获得响应,我可以使用简单的curl命令通过我的shell完美地访问它:

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


但是,当我尝试使用带有$http.post的Angular来达到它时,我会遇到一些“有趣”的行为。

虽然我的数据是:

    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. 

我真的很失落......任何建议都会非常感激!

2 个答案:

答案 0 :(得分:1)

我已经设法获得CORS设置&amp;运行

我的案例的服务器端远非琐碎,因为我们正在使用Play!框架和现代浏览器在发送真正的POST方法之前发送一个OPTION方法,稍微“预授权”发送CORS请求。

http://better-inter.net/enabling-cors-in-angular-js/中所述,我必须添加

        $http.defaults.useXDomain = true;

实际$http.post之前,但我没有删除'Content-Type'标题

<小时/> 如果您使用类似的设置,我建议您查看这些资源:

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

答案 1 :(得分:0)

正如亚当说的那样!

如果您使用的是apache:

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

或只是

Header set Access-Control-Allow-Origin: *

仅用于测试。对于生产,将原点限制为仅限您的域。