离子:显示由php呈现的数据

时间:2016-09-26 16:26:31

标签: php angularjs ionic-framework

我有一个离子应用程序,我想用我用PHP脚本获得的数据填充其中一个页面。所以,我的php:

<?php 

    $user = 'username';
    $pass = 'mypass';
    $client = new SoapClient('http://mywebsite.rs/api/soap/?wsdl', array('soap_version' => SOAP_1_2));

    try {
    $session = $client->login($user, $pass);

    $result = $client->call($session, 'api_category.rootcategories');
    print_r ( $result);

    $client->endSession($session);
} catch (Exception $e) {
    echo "Error: ".$e->getMessage();
}

?>

现在。我想在我的主页上打印结果。输出的简单方法是什么?问题是我不知道如何从离子框架调用该文件。我确实有一些代码,我从事过实验,但它不起作用:

.controller('AppCtrl',function($ scope,$ http,$ state,$ ionicModal,$ ionicHistory,$ ionicNavBarDelegate,SearchData,$ window){

$scope.categories = [];
var numberOfRow = 1;

var link = 'app/getAllCats.php';
$http.post(link).then(function (res){
  $scope.categories = res.data;
  for(var i = 0 ; i<res.data.length ; i++){
    if(res.data[i].is_active === 1)
      $scope.categories.push(res.data[i]);
  }
  arrayLength = $scope.categories.length;
  numberOfRow = ~~(arrayLength / 3);
   var div = arrayLength - numberOfRow;
   if(div <=2 || div >=1 ){
      numberOfRow = numberOfRow + 1;
   }
});
$scope.range = function(){
  return new Array(numberOfRow);
}
$scope.create = function(id){
  $state.go('fooBar',{category_id: id});
}
console.log($scope.categories);

})

1 个答案:

答案 0 :(得分:1)

在PHP代码中,您应该以JSON格式发送数组。替换此行:

print_r($result);

echo json_encode($result);

然后,如果您希望能够在客户端使用此结果,您有两个选择,您可以要求PHP通过在PHP的第1行添加此请求,将输出声明为任何发送请求的客户端的JSON档案:

header("Content-type: application/json");

或者要求JavaScript通过替换此行来将响应字符串解析为JSON对象:

$scope.categories = res.data;

通过

$scope.categories = JSON.parse(res.data);

PS:以下不是回答问题,但仍然很好知道

当使用Ionic(或更常见的AngularJS&#39; s)$http查询PHP服务器时,请求正文将作为原始JSON字符串发送。假设您想通过Ionic应用程序中的表单发送登录名和密码:

<input type="text" ng-model="user" />
<input type="password" ng-model="pass" />
<input type="button" ng-click="login()" />

$scope.login = function() {
  $http.post(link,
    {
      user: $scope.user,
      pass: $scope.pass
    }
  ).then(function(response) {
    ...
  });
}

然后在PHP中你会想要使用$_POST来获取发送的登录名和密码,而实际上,你不能因为$_POST超全局是通过解析主体中的查询字符串来创建的。请求

user=username
pass=P@s$W0rd666

而AngularJS的$http将原始JSON作为字符串发送。

{
    user: "username",
    pass: "P@s$W0rd666"
}

这很烦人但幸运的是,PHP还有另一个全局变量用于这些情况:$HTTP_RAW_POST_DATA。因此,在PHP代码中,您可以通过调用

来检索用户输入
<?php 
$postData = json_decode($HTTP_RAW_POST_DATA, 1); // don't forget the second argument
$user = $postData['user'];
$pass = $postData['pass'];
?>

对不起,很长的帖子,我觉得我需要告诉你这个。我希望有人在我遇到你的情况时这样做。

修改

您无法将PHP文件存储在离子项目的www目录中。您需要一个单独的Web服务器。也别忘了

header("Access-Control-Allow-Origin: *");

在PHP文件之上