使用$ http.post()的Codeigniter + Angular问题。 Codeigniter不接收数据

时间:2015-08-09 07:36:27

标签: javascript php angularjs codeigniter

我有奇怪的Codeigniter - Angular问题。 我的想法是设置控制器像这样工作:

  • index是简单的Angular页面,只有1个app和1个控制器
  • get是从数据库获取数据
  • set是使用$ http.post
  • 发送的保存数据

问题是$http.post()发送了正确的数据,我在Firebug中看到了, 但CI没有抓住这一点。

我更改了标头参数,试图抓住file_get_contents("php://input")$this->input->post,但始终是Null

有什么想法吗?

我试过了:

$http(   
{
method: 'POST',
url: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},

data: data
});

有和没有标题和transformData更改......什么也没有。

更新

我试图将相同的数据发送到原始的PHP脚本,并且它有效。所以,不知何故 - Codeigniter阻止了这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是一个常见问题,让我们开始: 将ngRoute脚本添加到您的文档中 并在您的应用程序模块中,添加此代码

var myApp = angular.module('myApp', ["ngRoute"]).
config(["$httpProvider",function($httpProvider) 
{
    $httpProvider.interceptors.push(['$q', function($q) {
    return {
            request: function(config) {
                if (config.data && typeof config.data === 'object') {
                    // Check https://gist.github.com/brunoscopelliti/7492579 
                    // for a possible way to implement the serialize function.
                    config.data = serialize(config.data);
                }
                return config || $q.when(config);
            }
        };
    }]);

    var serialize = function(obj, prefix) {
        // http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object
        var str = [];
        for(var p in obj) {
            var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
            str.push(typeof v == "object" ? serialize(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v));
        }
        return str.join("&");
    }

}]).
run(function($http) {
    $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8;";

});

现在在你的postService上(或者你在哪里使用$ http)

var postData = function(method,data) {
   return $http.post("controller.php?/"+method,{data:data})
   .then(function(response) {                
        return response.data;                    
    }, 
    function(response) {        
      //handle error
    }); 
 }

//use
postData("userLogin",{username:"username",password:"password"}).then(function(response){

});

现在codeIgniter将获得input-> post(“data”)(它总是数据);