2014-02-19 3 views
1

Итак, я потратил день на поиски в Интернете и забил клавиатуру, но ничего не помогло.Вызов моего злого сервиса REST от AngularJs

У меня есть простой службы REST в Servicestack, который возвращает этот

{"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} 

что бы это значит ..

EDIT: это работает в Pythonscript, не могу понять, почему оберточной ответ на «обещание» поможет мне ?

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

решаемые На самом деле у меня было две проблемы. Первый, как отметил Даниил, заключался в том, что Угловой получил обещание, а не объект JSON. Когда я решил это, у меня все еще были проблемы, которые, как оказалось, позволяли перекрестное доменное происхождение. Когда я это установил, все мои службы передали мне правильные обещания, и мир пришел в царство.

ответ

3

Вы не получаете немедленный результат от вашего вызова ресурса, Вместо этого вы получаете то, что называется обещание, так что вы должны использовать его следующим образом

$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'); 
}); 

Если у вас посмотрите, что вы получали до сих пор («$ prom»: {}, «$ resolved»: false) - это обещание, которое еще не было разрешено, вам нужно немного рассказать о своих обещаниях angualrjs


Заканчивать следующий plnkr example я сделал, что использует ресурс с REST все

+0

Благодарим за ответ, поэтому .NET ServiceStack не возвращает стандартный JSON? (никогда не использовал его раньше). Я попробую ваш код, но всегда попадаю в "error", будет google еще! – elwis

+0

Я не знаю, что ваш отдых вернет вам, что вам нужно решить, ключом здесь является понять, что угловые возвращают вам что-то, что называется обещанием, - это не немедленный ответ от вашего отдыха ... но обещание один ... – Daniel

+0

Обещания звучат намного лучше, чем оценки. Я думаю, что я это понимаю, но, к сожалению, я все равно попадаю в «ошибку», нужно придумать некоторые примеры того, как узнать, почему $ scope.resultPromise. $ Prom.then is evil.Еще раз спасибо – elwis

1

ли что-то нравится эта работа для вас? :

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

вместо возврата $ resource в моем сервисе, который вы имеете в виду? Попытаюсь – elwis

Смежные вопросы