AngularJS $ http.post / service issue

时间:2016-09-12 11:00:51

标签: javascript angularjs http http-post

我有一个奇怪的问题..当我加载我的详细信息页面时,错误部分首先在控制器中执行。

虽然服务myService被执行并且它确实返回了值,但是在控制器中执行错误并且我没有收到我的消息详细信息。

我之前已提供警报,且jsonObj有效。

控制器:

 url = 'http://' + add + ':8080/user/site.cgi';

   data = {
            ACTION : "list",
            STATS : "no"
          };
    myService.getdata(url, data) 
       .then(function(data, status, headers, config) {
          $timeout(function(){
            if (data.body.response.status == "OK") {

                if (data.body.response.msg.id) {
                    service2.seturl(data.body.response.msg.id, username, add);
                    messg.push(data.body.response.msg);
                } else
                    angular.forEach(data.body.response.msg, function(value, key) {
                           service2.seturl(value.id, username, add);
                           messg.push(value);
                    })

              $rootScope.messg = messg;
            } else {
                errorMessage = data.body.response.errmsg;   
                    alert(errorMessage);
                }
              }, 5000);
         }, function(error, status, headers, config) { 
                    alert("Check network connection.."); //Coming here without fulfilling promise.
        });
     }

服务:

.service('myService', function($http, $q, $httpParamSerializerJQLike) { 
  return {
      getdata: function(url, data) {
         var postData = data;
         return $http({
                      method : 'POST',
                      url : url,
                      data : $httpParamSerializerJQLike(postData)
                 }).then(function(response, status, headers, config) {

                      var x2js = new X2JS();
                      var jsonObj = x2js.xml_str2json(response.data);

                      if (typeof jsonObj === 'object') {
                          alert(jsonObj); //I am getting this alert just fine.
                          return jsonObj; //It does return the object.
                      } else {
                            return $q.reject(jsonObj);
                      }
                  }, function(response, status, headers, config) { 
                           return $q.reject(response.data);
                });
     }
   }
})


.factory('service2', function() {

     var urls = [{ }];

     return {
         all: function() {
            return urls;
         },

         geturl: function(id) {
            for (var i = 0; i < urls.length; i++) {
                if (urls[i].id === parseInt(id)) {
                    return urls[i];
                }
            }
          return null;
         },

         seturl: function(id, admin, add) {
            for (var i = 0; i < urls.length; i++) {
                if (urls[i].id === parseInt(id)) {
                    return null;
            }
         } 
            var idInt = parseInt(id);

            var createurl = 'http://' + add + ':8080/user/det.cgi';
            var postData = {
                                ACTION : “add”,
                                LOGIN : admin
                           };

            var url = {
                id: idInt,
                url: createurl,
                data: postData
            }

            urls.push(url);

            return null;
         }
     };
  })

1 个答案:

答案 0 :(得分:0)

试试这个,返回一个延期的承诺

.service('myService', function($http, $q, $httpParamSerializerJQLike) { 
  return {
   getdata: function(url, data) {
     var deferred = $q.defer(); 
     var postData = data;
             $http({
                  method : 'POST',
                  url : url,
                  data : $httpParamSerializerJQLike(postData)
             }).then(function(response, status, headers, config) {

                  var x2js = new X2JS();
                  var jsonObj = x2js.xml_str2json(response.data);

                  if (typeof jsonObj === 'object') {
                      alert(jsonObj); 
                      deferred.resolve(jsonObj); 
                  } else {
                      deferred.reject(jsonObj);
                  }
              }, function(response, status, headers, config) { 
                       deferred.reject(response.data);
            });

      return deferred.promise;
 }

} })