2016-08-04 6 views
2

Я пытаюсь сделать http сообщение в базу данных с помощью AngularJS. Мой код не показывает никаких ошибок, но моя база данных не обновляется, и я не могу понять, почему. Вот мой код:AngularJS Http Post Method не работает

//topic-service.js

(function() { 
     'use strict'; 
     angular.module('topic').factory('topicService', topicServiceFunction); 
     topicServiceFunction.$inject = [ '$http', '$q' ]; 
     function topicServiceFunction($http, $q) { 
      var topicService = { 
       getTopics : getTopics 

      } 
      return topicService; 

      function getTopics(obj) { 
       console.log('-->topicServiceFunction'); 
       console.log(obj.name); 
       var deferred = $q.defer(); 
       return $http.post('http://localhost:8080/restapp/api/topic', 
         JSON.stringify(obj)).then(function(response) { 
        if (typeof response.data === 'object') { 
         return response.data; 
        } else { 
         return deferred.reject(response.data); 
        } 
       }, function(response) { 
        return deferred.reject(response.data); 
       }); 

      } 

     } 

    }()) 

//topic-controller.js

(function() { 
     'use strict'; 
     angular.module('topic').controller('topicController', 
       topicControllerFunction); 
     topicControllerFunction.$inject = [ '$scope', 'topicService' ]; 
     function topicControllerFunction($scope, topicService) { 
      $scope.getTopics = getTopics; 
      function getTopics(topicId,name,description,categId,userId) { 
       console.log('-->topictrlFunction'); 
       $scope.topics = []; 

       var obj={ 
     id:$scope.topicId, 
     name:$scope.name, 
     description:$scope.description, 
     id_category:$scope.categId, 
     user_id:$scope.userId 

     } 
     var promise = topicService.getTopics(obj); 
       promise.then(function(data) { 
        if (data != undefined && data != null) { 
         $scope.topics = data; 
        } else { 
         $scope.topics = undefined; 
        } 
       }, function(error) { 
        console.log('error=' + error); 
        $scope.topics = undefined; 
       }) 
       topicService.getTopics(obj); 
       $scope.topics = topicService.getTopics(obj); 
      } 

     } 
    }()) 

//topic.html

<!DOCTYPE html> 
    <html lang="en" ng-app="myTopics"> 
    <head> 
    <meta charset="UTF-8"> 
    <script src="../../../bower_components/angular/angular.js"></script> 
    <script src="app.js"></script> 
    <script src="topics/module/topic-module.js"></script> 
    <script src="topics/controller/topic-controller.js"></script> 
    <script src="topics/service/topic-service.js"></script> 
    <title>Topics</title> 
    </head> 
    <body> 

     <div ng-controller="topicController"> 
      <div ng-controller="topicController"> 
       <p> 
        Topic id: <input type="text" ng-model="topicId"> 
       </p> 
       <p> 
        Name: <input type="text" ng-model="name"> 
       </p> 
       <p> 
        Description: <input type="text" ng-model="description"> 
       </p> 
       <p> 
        Id category: <input type="text" ng-model="categId"> 
       </p> 
       <p> 
        User id: <input type="text" ng-model="userId"> 
       </p> 
       <button ng-click="getTopics(topicId,name,description,categId,userId)">Add 
        topic</button> 
       <ul ng-repeat="topic in topics"> 
        <li>{{topic.id}} --{{topic.name}} -- {{topic.description}} -- 
         {{topic.id_category}}--{{topic.user_id}}</li> 
       </ul> 

      </div> 
    </body> 
    </html> 
+1

Тема этого поста говорится, что вы делаете 'запрос PUT', в то время как в вашем коде вы имеете' Post' –

+1

получите ли вызов в свой API? Вы проверяли, вызван ли ваш метод API? Если это так, это проблема с API – Weedoze

+0

Я проверил свой метод почты с пользовательским интерфейсом Swagger, и он работает. Кроме того, я сделал метод get аналогичным образом в AngularJS, и он сработал. – user5642508

ответ

2

В ваш сервис, который вы используете $ q, но возвращаете $ http обещание, это счетчик результативности, просто возвращайте отложенное обещание:

function getTopics(obj) { 

     console.log('-->topicServiceFunction'); 
     console.log(obj.name); 

     var deferred = $q.defer(); 
     var data = JSON.stringify(obj) 

     $http.post('http://localhost:8080/restapp/api/topic', data) 
      .then(function(response) { 
       if (typeof response.data === 'object') { 
        deferred.resolve(response.data); 
       } else { 
        deferred.reject(response.data); 
       } 
      }) 
      .catch(function(response) { 
       return deferred.reject(response.data); 
      }); 

    return deferred.promise; 

} 

Если он все еще не работает, вы должны попытаться отправить urlencoded данные, а не JSON:

для этого просто добавьте этот заголовок в запросе: headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}

и закодировать данные с $httpParamSerializerJQLike службы. (Вводите его в эксплуатацию)

function getTopics(obj) { 

     console.log('-->topicServiceFunction'); 
     console.log(obj.name); 

     var deferred = $q.defer(); 
     var data = $httpParamSerializerJQLike(obj); 
     var config = { 
     headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
     }; 

     $http.post('http://localhost:8080/restapp/api/topic', data, config) 
      .then(function(response) { 
       if (typeof response.data === 'object') { 
        deferred.resolve(response.data); 
       } else { 
        deferred.reject(response.data); 
       } 
      }) 
      .catch(function(response) { 
       return deferred.reject(response.data); 
      }); 

    return deferred.promise; 

} 
+0

Спасибо, но я пробовал и все еще не работает. – user5642508

+0

только что отредактировано сейчас, config отсутствовал из $ http call – Gatsbill

+0

Большое спасибо !!! Теперь это работает. – user5642508

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