我正在尝试使用Angular JS编写以下Curl命令。我对AngularJS很新,所以我可能会遗漏一些基本的东西。具体来说,这是一个移动应用程序,即使用离子框架(使用Angular JS)
curl命令是这样的:
curl -X POST -d "username=xxxx&password=xxxx&action=login&view=console" http://myserver.com/zm/index.php?skin=xml
这可以从命令行完美运行。
在AngularJS中,我有以下代码:
angular.module('starter.controllers').controller('MonitorCtrl', function($ionicPlatform, $scope,$http)
{
console.log("***MAKING REQUEST");
//$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
$http({
url:'http://myserver.com:9898/zm/index.php?skin=xml',
method:'post',
headers: {'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
var foo= str.join("&");
console.log ("****RETURNING "+foo);
return foo;
},
data: {username:'admin',
password:'xxxx',
action:'login',
view:'console'}
})
.success (function()
{console.log("****YAY");
})
.error(function(data, status, headers, config)
{
console.log("***OOPS "+status + " H: "+data);
});
});
当我运行此代码时,我看到一个POST请求发送到我的服务器(我正在使用httpry嗅探),并且从服务器返回了带有所需有效负载的200OK,但我的成功处理程序未被调用。调用错误处理程序,状态为0
答案 0 :(得分:1)
数据应为json
。这取决于您的服务器。
执行此操作的常用方法是在对象上使用属性:
data: {username: 'xxxx', password: 'xxxx', action: 'login', view:'console'}
但是如果您的服务器收到一个字符串作为输入,那么:
data: {key: 'username=xxxx&password=xxxx&action=login&view=console'}
答案 1 :(得分:1)
好的,我终于弄明白了
a)Amir popovich是正确的,如果我正在处理XML,我需要进行“变形”。 (对于非Calvin和Hobbes的读者,以神奇的方式转换)JSON to XML。我在我的问题中发布的更新代码正是这样且有效。但即便在完成所有这些操作后,我的URL帖子(或获取)也失败了。
b)我遇到的整个错误的CORS错误是因为我在桌面浏览器(Safari)中运行此应用程序,而Safari正在推出响应,除非它有Accept Origin
c)当我在手机上部署并测试应用程序时,它就像一个魅力。不要问我为什么