【问题标题】:PHP/Angularjs/Post data emptyPHP/Angularjs/Post 数据为空
【发布时间】:2015-07-15 18:51:09
【问题描述】:

我确实在表单中选择了两个字段 (month and origin) 并将其提交给 AngularJS 控制器,我使用的是与 Ionic 框架打包的 1.3.13 版本。

then 方法中观察console.log,值被正确填充。

返回的q.promisse 具有以下值:[object, object]

HTML 模板的列表未填充正确的预期值。

这些值不会填充PHP API 中的PHP POST 变量。

如何填充POST 数据?

在我的模板中,我确实提交给search 方法:

 <form method="post" ng-controller="AcpSearchCtrl" ng-submit="search(data)">
    <select name="month" ng-model="data.month">
      <option value="01">January</option>

在我的控制器中,请使用http.postpromisse

.controller('AcpSearchCtrl', function($scope, ApiAcpSearch, $ionicLoading, $timeout, $http, ApiAcpEndpoint, $q) {  
  $scope.search = function(data) {
    $ionicLoading.show({
      noBackdrop: false,
      template: '<p>searching ...</p>'
    });
    var q = $q.defer();
    $scope.formData = {};
    $scope.submission = false;
    var param = function(data) {
          var returnString = '';
          for (d in data){
              if (data.hasOwnProperty(d))
                 returnString += d + '=' + data[d] + '&';
          }
          return returnString.slice( 0, returnString.length - 1 );
    };
    console.log('formData : '+$scope.formData);
    return $http({
      url:ApiAcpEndpoint.url,
      data : param($scope.formData),
      method : 'POST',
      headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
    }) 
    .then(function(data) {      
          q.resolve(data);          
          var acp = {};
          acp.qdata = [ data ];
          $scope.data = acp.qdata;
          $ionicLoading.hide();
          return q.promise;
      });
  }
})

【问题讨论】:

    标签: php angularjs


    【解决方案1】:

    默认情况下,AngularJS 以 JSON 格式发送数据。您不会在常规 PHP 全局变量($_REQUEST、$_POST 或 $_GET)中找到它。

    你有两种方法可以解决这个问题:

    为AngularJS全局设置默认的Content-Type(只在请求前设置header是行不通的)。

    var app = angular.module("app", []);
    app.config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
        $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
    }]);
    

    另一种方法是您处理 AngularJS 在 PHP 中发送数据的方式:

    $angularJSData = json_decode(file_get_contents("php://input"));
    
    // json_decode will create an object so if you need in array format
    $angularJSData = (array)$angularJSData;
    

    有了这些知识,您可以创建一个函数,甚至是您自己的全局函数。

    【讨论】:

    • 谢谢 Ricardo,我试过了,但没用,这一定是个小细节。有什么我可以做的调试吗?我正在打印并在服务器端看到null PHP 脚本。我还尝试分离成一个服务,在那里显示月份和来源,但仍然没有进入PHP API
    • 我刚刚得到 err_content_encoding
    • @ÂngeloRigo 发布您的整个表格。
    • 我通过了整个表格,正如你所指的那样!非常感谢你。我现在的问题是,在console log,我看到按月份过滤的正确数据来自网络服务,但模板没有更新来显示这些数据和而是显示未过滤的数据。我有$scope.dataconsole.log 上的真实数据,我如何强制更新或返回正确的数据?
    • @ÂngeloRigo 在不了解您的全部要求(或离子框架)的情况下,这是我的建议。我认为您在这种情况下使用承诺会使事情复杂化$http({ /* code */ ).success(function(data) { /* More stuff */ });。你明白我的意思吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2015-10-23
    • 1970-01-01
    • 2011-02-28
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多