Codeigniter + Angular Js:如何接收JSON数据

时间:2014-05-14 15:58:25

标签: php json angularjs codeigniter post

情况如此:

我在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);
}

但返回的是一个布尔值假。

5 个答案:

答案 0 :(得分:13)

感谢您的回复。 解决方案如下

$obj=json_decode(file_get_contents('php://input'));

您可以通过

进行测试
print_r(json_decode(file_get_contents('php://input')));

答案 1 :(得分:3)

CodeIgniter中的

$_POST将为空,因为出于安全原因,它会故意清空它。您需要改为使用$this->input->post();

CodeIgniter Input Class

答案 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-urlencodedapplication/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数据都将为您解码。