Angularjs - 无法传递参数

时间:2014-08-16 21:04:25

标签: php angularjs cordova ionic-framework

我在我的移动应用项目中使用angularjs。我的问题是我无法将我的所有参数传递给我自己的API。我的API无法检测到我的应用发送给它的任何帖子参数。

$http.post("http://xxxxxxxx/api/verify_login.php", {
    "username": "admin",
    "password": "12345678",
    "secret_key": "123456789"
}).success(function(data, status, headers, config) {
    alert(JSON.stringify(data));
}).error(function(data, status, headers, config) {
    alert(JSON.stringify(status));
});

如果使用POSTMAN,它可以正常工作。

请指教。谢谢。

2 个答案:

答案 0 :(得分:1)

怎么样:

var postData = '{"username":"'+varUsername+'", "password" : "'+varPassword+'", "secret_key" : "'+varSecretyKey+'"}';

$http({
    method: 'POST',
    url: 'http://xxxxxxxx/api/verify_login.php',
    data: postData,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(response) {
        $scope.result = response;
        alert(JSON.stringify(data));
    });

这会将数据发布为:

username=hisname&password=hispassword&secret_key=hiskey

请记住,angularjs会自动将您的postdata转换为JSON。

答案 1 :(得分:0)

看起来this StackOverflow答案有助于解决问题的一半。看看接受的答案。要在这篇文章中引用这句话:

  

默认情况下,jQuery使用Content-Type传输数据:x-www-form-urlencoded和熟悉的foo = bar& baz = moe序列化。然而,AngularJS使用Content-Type:application / json和{" foo":" bar"," baz":" moe&#34传输数据; JSON序列化,遗憾的是一些Web服务器语言 - 特别是PHP - 本身不会反序列化。

有一种很好的方法可以做到这一点 - 覆盖默认的transformRequest - 这是Ben Nadel发表的一篇精彩文章here - 这是一个片段:

var request = $http({
    method: "post",
    url: "process.cfm",
    transformRequest: transformRequestAsFormPost,
    data: {
        id: 4,
        name: "Kim",
        status: "Best Friend"
    }
}); 

他有一个相当简单的实现 - 如果您发现这对您不起作用,您可以使用详细版本here - 您可以在控制器中注入此工厂。

.factory("transformRequestAsFormPost", function() {
    function transformRequest(data, getHeaders) {
        var headers = getHeaders();
        headers["Content-type"] =
            "application/x-www-form-urlencoded; charset=utf-8";
        return (serializeData(data));
    }
    return (transformRequest);

    function serializeData(data) {
        if (!angular.isObject(data)) {
            return ((data === null) ? "" : data.toString());
        }
        var buffer = [];
        for (var name in data) {
            if (!data.hasOwnProperty(name)) {
                continue;
            }
            var value = data[name];
            buffer.push(encodeURIComponent(name) + "=" + encodeURIComponent((value ===
                null) ? "" : value));
        }
        var source = buffer.join("&").replace(/%20/g, "+");
        return (source);
    }
});