【发布时间】:2016-11-01 19:43:23
【问题描述】:
好的,首先,我是 Angular 新手。我正在尝试使用 $http.get 调用从 CouchDB 获取我的所有文档(一个 JSON 对象)。 JSON 对象基本上是一个人员列表,带有一个 id、他们的名字和一些引号:
{
"total_rows": 2,
"offset": 0,
"rows": [
{
"id": "5",
"key": "5",
"value": {
"rev": "1-b26014051b18bce04ae2190d9cb92d81"
},
"doc": {
"_id": "5",
"_rev": "1-b26014051b18bce04ae2190d9cb92d81",
"dataid": "5",
"dataname": "Robin",
"dataquote": "Blah"
}
},
{
"id": "9",
"key": "9",
"value": {
"rev": "1-8ecbf37d0ccc129530e57747b46faa8e"
},
"doc": {
"_id": "9",
"_rev": "1-8ecbf37d0ccc129530e57747b46faa8e",
"dataid": "9",
"dataname": "Bert",
"dataquote": "Hallo"
}
}
]
}
我想按照下面的 HTML 显示每个人的名字:
<div>
<p class="lead">Persons</p>
<ul>
<li ng-repeat="p in persons"><a ng-href="#/quotes/{{ p.doc.dataid }}">{{ p.doc.dataname }}</a></li>
</ul>
</div>
这是我正在使用的控制器和服务:
.controller('personsCtrl', ['$scope', 'personSrv', function personsCtrl($scope, personSrv) {
$scope.persons = personSrv.getAllpersons();
.factory('personSrv', ['$http', '$q', function ($http, $q) {
return{
getAllpersons: function(){
return $http.get('http://localhost:5984/quotes/_all_docs?include_docs=true')
.then(function(response){
if (typeof response.data === 'object'){
return response.data.rows;
} else{
return $q.reject(response.data);
}
}, function(response){
return $q.reject(response.data);
});
}
};
}])
我检查了我的调试器,GET 调用工作正常,但问题是名称不会显示在浏览器的页面上。我假设返回的数据没有正确分配给 $scope.persons 变量。
【问题讨论】:
-
将
return response.data.rows;改为return response.rows;$http then调用直接接收数据。也只是$scope.persons = response.rows;而不是那个任务。删除$scope.persons = personSrv.getAllpersons();分配。 -
尝试使用 $scope.persons = response.rows;但是我的调试器显示一个错误,指出响应未定义。恐怕将 response.data.rows 更改为 response.rows 也不起作用。
-
http://localhost:5984/quotes/_all_docs?include_docs=true直接在浏览器中点击 url 来调试你得到的东西。响应未定义,因为存在一些问题。 '$q.reject(response.data)` 行需要修复 - 该函数的response参数应为error。function(error){ console.log(error); console.log(error.status); return $q.reject(error); }
标签: javascript jquery angularjs json