javascript - Codeigniter + $http.post() 的 Angular 问题。 Codeigniter收不到数据

标签 javascript php angularjs codeigniter

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

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

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

我更改 header 参数,尝试使用 file_get_contents("php://input")$this->input->post 捕获,但总是

有什么想法吗?

我尝试过这个:

$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 阻止了这个。

有什么想法吗?

最佳答案

这是一个常见问题,让我们开始: 添加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") (它始终是数据);

关于javascript - Codeigniter + $http.post() 的 Angular 问题。 Codeigniter收不到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901976/

相关文章:

PHP,Mysql : Get hour, 分钟并存储在变量中

php - PDO "ORDER BY"仅在硬编码时有效

javascript - 如何使用下拉按钮显示范围?

angularjs ui-grid 在页脚中显示总数

Javascript/AngularJS 要求消费者下载 iOS/Android 应用程序

javascript - 在 MVC 中设置多选下拉列表的选定值

javascript - jQuery .load 变量作为 url

javascript - Acrobat SDK - 在打开时检索 PDF 路径

php - CodeIgniter 中的 $this->load->view() 是什么

css - ionic 中带有 ng-repeat 的列不会分成行