情况如此:
我在Angular JS中创建了一个简单的应用程序,通过在codeigniter中创建的API与服务器通信。
应用程序中有一个登录系统。当用户输入电子邮件和密码时,此数据将发送到服务器,如果电子邮件存在且密码匹配,则返回true。
我做了很多尝试,但没弄清楚我怎么能正确地做到这一点。
这是代码:
表格:
<form role="form" method="post" novalidate ng-submit="submitForm()">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" name="email" ng-model="user.name" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" name="password" ng-model="user.password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
这是Angular js控制器:
$scope.authorized = false;
$scope.user = {};
$scope.submitForm = function()
{
console.log("posting data....");
$http({
method : 'POST',
url : 'http://127.0.0.1/api/main/login',
headers: {'Content-Type': 'application/json'},
data : JSON.stringify({email:$scope.user.email, password:$scope.user.password})
}).success(function(data) {
console.log(data);
$scope.authorized = data;
if ($scope.authorized) { $location.path("memberArea"); };
});
}
在 codeigniter方法中尝试了很多东西。 现在就是这样:
function login()
{
print json_encode($_POST);
}
但我不知道是否可以将数据接收到$ _POST中,因为它似乎是空的。
所以问题是:
我如何在codeigniter方法中接收数据? 最好发送为JSON,然后发送json_decode? 我也试过json_decode($ _ POST,true); 但是没有。 但是如果数据不在$ _POST里面呢? 我有点困惑..
谢谢你的帮助!
修改
谢谢大家的回复。 这是尝试过的一件事。但不知何故不起作用。 现在举例来说,方法是这样的:
function login()
{
$email = $this->input->post('email');
var_dump($email);
print json_encode($email);
}
但返回的是一个布尔值假。
答案 0 :(得分:13)
感谢您的回复。 解决方案如下
$obj=json_decode(file_get_contents('php://input'));
您可以通过
进行测试print_r(json_decode(file_get_contents('php://input')));
答案 1 :(得分:3)
$_POST
将为空,因为出于安全原因,它会故意清空它。您需要改为使用$this->input->post();
。
答案 2 :(得分:2)
使用:
$postData = $this->input->post();
它应该为您提供包含所有发布数据的数组。
我还建议你打开XSS过滤。
以下是Codeigniter输入类的文档:http://ellislab.com/codeigniter/user-guide/libraries/input.html
答案 3 :(得分:1)
随请求发送的数据是名称 - 值对,因此您应该写一些类似的东西:
data : {"myformdata":JSON.stringify({email:$scope.user.email, password:$scope.user.password})}
在代码点火器中,您可以重新获取数据:
$this->input->post("myformdata"); //should return what
// that JSON.stringify returned
答案 4 :(得分:1)
虽然这已经得到解答,但我经常在我的许多应用程序中都包含这个快速的小实用程序,它需要接受application/x-www-form-urlencoded
和application/json
POST。
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') === 0 && stripos($_SERVER['CONTENT_TYPE'], 'application/json') !== FALSE) {
// POST is actually in json format, do an internal translation
$_POST += json_decode(file_get_contents('php://input'), true);
}
在此之后,您现在可以像往常一样使用$_POST
超级全局,所有JSON数据都将为您解码。