0

我正在尝试使用 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


但是,当我尝试使用 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)

        })

干脆什么都不做。
什么都没有!


相反,在 url 前面加上一个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. 

我真的很迷茫......任何建议将不胜感激!

4

2 回答 2

1

我已经成功启动并运行了 CORS 设置。

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

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

        $http.defaults.useXDomain = true;

在实际之前$http.post,但我不必删除'Content-Type'标题


如果您曾经使用过类似的设置,我建议您查看以下资源:

播放 2.0.1 并设置 Access-Control-Allow-Origin
播放!2.0 轻松修复路由器包罗万象的 OPTIONS 响应?

于 2013-10-30T17:14:06.343 回答
0

正如亚当所说!

如果您使用的是 apache:

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

要不就

Header set Access-Control-Allow-Origin: *

这样做只是为了测试。对于生产,将来源限制为仅您的域。

于 2013-10-28T18:50:09.510 回答