AngularJS在浏览器中进行REST调用并显示结果

时间:2014-06-24 09:22:46

标签: javascript angularjs rest

我试图从REST服务获取数据并在浏览器中显示元素。 一段代码:

Server.prototype.typeNames = function() {
                var json = '{'
                        + '"query" : "MATCH n RETURN n.typeName LIMIT 10"'
                        + '}';
                $http.post("http://localhost:7474/db/data/cypher", json).then(function(response) {
                    var data = response.data;
                    console.log(data);
                    return data;
                });
            }

我确定JSON和REST调用是正确的,因为我可以在控制台中看到数据并且它是正确的但我无法在页面上看到它。 我在我的js文件中也有这个:

$scope.typeNames = Server.typeNames()

在HTML中:

{{typeNames}}

另外:我为chrome安装了AngularJS调试扩展,并且它也是null:

typeNames: null

在这里(http://pastebin.com/itHv97da)你可以找到更大的代码部分。这段代码不是我的,Server.prototype的东西都在那里。我刚刚添加了Server.prototype.typeNames,我试图让它工作。

3 个答案:

答案 0 :(得分:1)

您的typeNames功能并未返回任何内容。

根据版本,您可以尝试返回整个$ http部分,但更好的方法是返回一个承诺,并在.then回调中解析承诺。

这样的事情:

var deferred = $q.defer();
$http.post("http://localhost:7474/db/data/cypher", json).then(function(response) {
    var data = response.data;
    console.log(data);
    deferred.resolve(data); // <--- this is the key
    return data;
});
return deferred.promise;

答案 1 :(得分:0)

由于这是一个异步调用,你需要使用promises,一些样本:

Processing $http response in service

有关承诺如何运作的更多信息:

http://andyshora.com/promises-angularjs-explained-as-cartoon.html

答案 2 :(得分:0)

Server.prototype.loadTypeNames = function(typeNames) {
  var json = {query : 'MATCH n RETURN n.typeName LIMIT 10'};

  $http.post("http://localhost:7474/db/data/cypher", json).then(function(response) {
      typeNames = response
  });
}

在你的js文件中:

$scope.typeNames = [];
Server.loadTypeNames(typeNames);