我有一个离子应用程序,我想用我用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);
})
答案 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);
当使用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文件之上