我正在使用AngularJS来构建Web应用程序。 我有一台运行PHP的服务器,它从SQL数据库中获取一些数据并将其编码为JSON。在客户端,我使用Angular $ http服务来获取它,解析它并成功,但是我无法使用分配了获取数据的变量。 这是执行HTTP请求的代码:
factory.employees = factory.getEmployeesFromServer();
factory.getEmployeesFromServer = function() {
return $http.get("http://localhost/scrumboard/get_user.php")
.success(function(response) {
for(var property in response) {
console.log("PROP: "+property);
if (response.hasOwnProperty(property)) {
console.log("Has ownProperty: " + property)
}
}
console.log(JSON.stringify(response));
return response.data;
})
.error(function(response, status, headers, config) {
})
}
属性的打印只包含零和一。 但是,当Stringify-print到达控制台时,它看起来像这样:
[{"email_id":"rob_en@gmail.com","user_name":"rob","first_name":"Robert","last_name":"Allen","password":"roballen","admin_right_id":"2"},{"email_id":"rob_ena@gmail.com","user_name":"robad","first_name":"Roben","last_name":"Lena","password":"aleno","admin_right_id":"1"}]
您可以看到它是两个对象中的数组,但我无法访问这些对象的属性,即使我可以将其与ng-repeat
一起使用。请参阅以下代码段:
<li ng-repeat="emp in availableEmployees">
<label class="btn btn-primary" ng-model="checkModel" btn-checkbox>
HELLO {{emp.user_name}}
</label>
</li>
该代码生成两个列表项但没有文本。
以下图片来自调试控制台,检查employees
对象:
我对网络开发很陌生,希望有人能帮助我! 我已经做了很多调试,但不想再这个帖子膨胀,所以只要问你是否需要任何特定的信息。
答案 0 :(得分:1)
对服务器的调用是异步的。在您的工厂代码中,您要将employees
分配给$http.get
的返回值,该值返回a promise。
因此,在HTML中,您将重复承诺对象的属性。这就是为什么你得到那个奇怪的输出。然而,控制台日志会记录正确的数据,但该数据(如我所说)未设置为您重复的属性。
您应该更新工厂代码,将承诺的结果设置为employees
变量而不是承诺本身:
factory.getEmployeesFromServer().then(function(data){
factory.employees = data;
});
factory.getEmployeesFromServer = function() {
return $http.get("http://localhost/scrumboard/get_user.php")
.success(function(response) {
for(var property in response) {
console.log("PROP: "+property);
if (response.hasOwnProperty(property)) {
console.log("Has ownProperty: " + property)
}
}
console.log(JSON.stringify(response));
return response.data;
})
.error(function(response, status, headers, config) {
})
}
答案 1 :(得分:0)
我认为您可能在视图中引用了ng-repeat行中的错误变量 我将替换availableEmployees与员工,看看是否修复了它,因为它似乎是你分配给你的范围。
<li ng-repeat="emp in employees">
<label class="btn btn-primary" ng-model="checkModel" btn-checkbox>
HELLO {{emp.user_name}}
</label>
</li>
答案 2 :(得分:0)
您的代码存在的问题是factory.getEmployeesFromServer
不会返回员工列表,它是异步的。你可以做的,就是只返回工厂的承诺,如下:
factory.getEmployeesFromServer = function() {
return $http.get("http://localhost/scrumboard/get_user.php");
};
然后要获得您的雇主列表,您需要将呼叫回传给success
方法,此回叫应该在模型上分配您需要的值(让我们说{{1 }})应该在您的控制器emp
($scope
)上,如下所示:
$scope.emp