从AngularJs调用我邪恶的REST服务

时间:2014-02-19 08:26:57

标签: angularjs rest

所以,我花了一天时间用Google搜索并敲击键盘,但似乎没有任何帮助。

我在Servicestack中有一个简单的REST服务,它返回此

{"Name":"ANDERSON, ALICE"}

我正试图从我的服务中调用它

  .service('Myservice', function Myservice($resource) {
return $resource('http://localhost:61721/britta/:Id',
    {Id: "@Id"},
    {
        show: { method: 'GET',  params: { }, headers: {'Accept':'application/json'}}
 });
 });

我从一个简单的控制器中调用这个,带有硬编码值

   $scope.submit = function (form){
   $scope.result= Myservice.show({}, {'Id' : '1'});
   alert(JSON.stringify($scope.result));

但我的表格是空的

<div class="resultpanel" ng-show="result">
<p> Name: {{ result.Name }} </p>

如果我修改我的代码以返回它工作的简单JSON,那么我想我在编写服务时很糟糕? 那个JSON.stringify只告诉我

{"Id":"1","$promise":{},"$resolved":false}

无论那意味着什么..

编辑:   这在Pythonscript中起作用,不能真正理解为什么将答案包装成“承诺”会对我有帮助吗?

import urllib2
url = 'http://localhost:61721/britta/1/?format=json'
response = urllib2.urlopen(url).read()
print response
...
{"Name":"ANDERSON, ALICE"}

解决 的 其实我有两个问题。第一个,正如丹尼尔指出的那样,Angular得到了一个承诺,而不是一个JSON对象。当我解决这个问题时,我仍然遇到了允许跨域起源的问题。当我把它设置好时,我所有的服务都很好地向我传达了正确的承诺,并且和平来到了这个领域。

2 个答案:

答案 0 :(得分:3)

您没有从资源调用中获得直接结果,而是获得了一些名为 promise 的内容,因此您应该按照以下方式使用它

$scope.resultPromise= Myservice.show({Id : '1'});

resultPromise.$promise.then(function (value, responseHeaders) {
    console.log('All ok lets continue');
    $scope.result = value;
    alert($scope.result);
}, function (error) {
    console.log('Something went wrong');
});

如果你看看你到现在为止所做的事情(“$ promise”:{},“$ resolved”:false )是一个尚未解决的承诺,你应该谷歌一点关于angualrjs承诺


查看以下plnkr example我使用REST全部使用资源

答案 1 :(得分:1)

这样的事情对你有用吗? :

$http({
    cache: false,
    url: http://localhost:61721/britta/1,
    method: "GET"
}).success(function(data) {
    console.log(data)
}