我正在使用nodeJS,因此服务器将通过执行以下操作将以下json对象发送到控制器:
data = {
"question": "theQuestion",
"answer": "theAnswer"
};
res.json(data);
然后在控制器中,我想操纵变量,如:
data = QA.get();
$scope.q = data[question] + "Some additional info here";
QA是定义为:
的服务angular.module('questionServices', ['ngResource'])
.factory('QA', function ($resource) {
return $resource('/qa');
});
但是,错误消息总是告诉我data[question]
未定义。获取价值的正确方法是什么?我试过了data.question
。它也不起作用。
我知道我可以通过在html中使用ng-repeat来简单地显示json值,但我想更灵活地管理值。
答案 0 :(得分:1)
似乎你QA函数使用$ http或$ resource来获取ajax响应。
如果在QA服务中返回$ http.get / $ http.post,则可以使用此代码来处理json响应:
QA.get().success(function(data){
console.log(data);
console.log(data.answer);
}).error(functoin(data){
//handle error here.
});
如果您在QA服务中使用$ resource,那么您可以使用此代码来处理:
QA.get().$promise.then(function(data){
console.log(data);
console.log(data.answer);
}).then(function(error){
//handler error here.
});
P.S你需要在ajax中理解,javascript在异步中处理请求。这意味着何时 执行这些代码:
$scope.data = QA.get()
console.log($scope.data); // QA.get() send a http request. Now data is still promise object.
你不能立即得到这个回应。因此,如果您尝试记录数据,或使用console.log(data.answer)
获取data.answer。你会得到undefined
然而在你的HTML视图中。您可以使用{{data|json}}
获取数据。这是因为角度会$看你的数据。一旦数据($ resource promise对象)发生变化(表示http请求已完成),Angular将自动呈现您的视图。
这就是为什么在您看来您可以获得data.answer。但是在你的控制器中,你不能。
答案 1 :(得分:0)
$ scope.data = QA.get();
的console.log(数据);
或在您的模板中:
{{data | json}}
这会给你一个提示