javascript - AngularJS $http.post/service 问题

标签 javascript angularjs http http-post

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

虽然服务 myService 得到执行并返回值,但在 Controller 中执行了错误,我没有收到消息详细信息。

我之前已经在服务中发出警报并且 jsonObj 有效。

Controller :

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

最佳答案

试试这个,返回一个延迟的 promise

.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;
 }

} })

关于javascript - AngularJS $http.post/service 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39448840/

相关文章:

javascript - 如何找到base64图像的宽度和高度

javascript - 为什么我没有实体的引用 ID?

css - 在具有拖放功能的表中显示树并保留来自 angularjs 的数据

javascript - 在MooTools中,.implement和.prototype有什么区别

javascript - Google Map API - 在当前 map 上自动完成搜索

javascript - 检查新用户

javascript - Angular Js - 避免在 ng-repeat 中重复

php - 尝试使用 C 向本地服务器发送 POST 请求

java - 如何获取整个http post的值?解析 Restful 帖子

java - 使用 Servlet API,如何确定请求是 HTTP/1.0 还是 HTTP/1.1?