Как получить данные результата в запросе углового обещания?

0

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

Вот некоторые из моего кода:

<div ng-app="promiseCall">      
    <div ng-controller="promiseCtrl">       
        <button tyle="button" class="btn btn-default" ng-click="promiseCallRequest()">Promise Call</button>     
        <table class="table table-bordered table-hovered">
            <thead>
                <tr>
                    <td class="text-center"><label>ID</label></td>
                    <td class="text-center"><label>TITLE</label></td>
                    <td class="text-center"><label>BODY</label></td>
                    <td class="text-center"><label>CREATED AT</label></td>
                    <td class="text-center"><label>UPDATED AT</label></td>
                </tr>
            </thead>
            <tbody>
                <!-- no output -->
                <tr ng-repeat="item in noteListing">
                    <td>{{ item.id }}</td>
                    <td>{{ item.title }}</td>
                    <td>{{ item.body }}</td>
                    <td>{{ item.created_at }}</td>
                    <td>{{ item.updated_at }}</td>
                </tr>
            </tbody>        
        </table>    
    </div>    
</div>


angular.module('promiseCall',[])
.controller('promiseCtrl', function($scope, $log, noteData) {       
    $scope.promiseCallRequest = function() {            
        var getPromiseCallData = noteData.getNoteData();            
        getPromiseCallData.then({
            function(payload) {                 
                console.log(payload); //no output :(                    
                //$scope.noteListing = payload.data;
            },
            function(errorPayload) {
                $log.error('Failure request in note', errorPayload);
            }
        });             
    }       
}).factory('noteData', function($http, $log, $q) {
    return {
        getNoteData: function() {               
            var deferred = $q.defer();              
            $http.get("<?php echo site_url('tutorial/getAjaxData'); ?>")
            .success(function(data){                    
                /*
                deferred.resolve({
                    id: data.id,
                    title: data.title
                });
                */                  
                //console.log('success'); -- ok                 
            })
            .error(function(msg, code){
                deferred.reject(msg);
                $log.error(msg, code);
                alert('there must be an error!');
            });             
            return deferred.promise;                
        }
    }
});

Здесь вывод JSON:

{"article_data":[{"id":"1","title":"sample updated 1","body":"sample 1","created_at":"2015-06-15 15:37
:28","updated_at":"2015-06-15 21:38:46"},{"id":"2","title":"sample 2","body":"sample 2","created_at"
:"2015-06-15 15:37:54","updated_at":"2015-06-15 15:37:54"}]}
Теги:

2 ответа

1
Лучший ответ

попробуйте приведенный ниже код:

....
getPromiseCallData.then(function(payload) {                 
        console.log(payload); //no output :(                    
        //$scope.noteListing = payload.data;
    }).catch(function(errorPayload) {
        $log.error('Failure request in note', errorPayload);
    });         

...
getNoteData: function() {                       
    return $http.get("<?php echo site_url('tutorial/getAjaxData'); ?>");   
    }

в getNoteData, то, что вы сделали, было обещанием анти-шаблона, у вас уже есть обещание, нет необходимости создавать для него еще одну оболочку.

Редактировать:

если вы хотите зарегистрировать успех службы и ошибку, вы могли бы просто сделать это, вам все равно не нужно дополнительное обещание:

getNoteData: function() {                       
    return $http.get("<?php echo site_url('tutorial/getAjaxData'); ?>").then(function(data){
        //some log
        return data;
    }, function(err){
        // log err
        return err;
    });   
}
  • 0
    Спасибо за дополнительную информацию, это работает также. :) Я хочу включить информацию об успехе и ошибке, так что можно ли удалить успех и функцию в сервисе?
  • 1
    @Jerielle проверь мое обновление ...
2

Попробуйте удалить {} в getPromiseCallData.then({}); ,

Например

$scope.promiseCallRequest = function() {
    var getPromiseCallData = noteData.getNoteData();

    getPromiseCallData.then(
            function(payload) {

                console.log(payload); //no output :(

                //$scope.noteListing = payload.data;
            },
            function(errorPayload) {
                $log.error('Failure request in note', errorPayload);
            }
    );
};

Надеюсь, поможет.

  • 0
    Спасибо, это работает. :)
  • 0
    Пожалуйста. Удачного кодирования!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню