2014-06-24 73 views
0

我試圖從REST服務獲取數據並在瀏覽器中顯示元素。 一段代碼:AngularJS使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}} 

另外:我安裝AngularJS鍍鉻調試擴展,那裏也是空:

typeNames: null 

這裏(http://pastebin.com/itHv97da)你可以找到更多的代碼。這段代碼不是我的,Server.prototype的東西都在那裏。我只是添加了Server.prototype.typeNames,我試圖讓它工作。

回答

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; 
+0

的'$ http.post'是不是已經延期對象?那麼爲什麼我們需要在'then'中添加另一個承諾呢? –

+0

@PatrickFerreira我不確定它是否在每個版本中都如此(這就是爲什麼我在第二個句子中寫這個的原因)......但即便如此,OP還是需要從'typeNames'函數('return $ http。 post ...'),或者只是將響應數據分配給範圍變量,如果它是合適的範圍。 – Shomz

+0

哦,我明白了,謝謝:-) –

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); 
相關問題