我在我的移动应用项目中使用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,它可以正常工作。
请指教。谢谢。
答案 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);
}
});