Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制器中未解析Http承诺_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 控制器中未解析Http承诺

Angularjs 控制器中未解析Http承诺,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我刚刚开始学习AngularJS,在理解承诺方面遇到了问题。我有 调用后端服务器并返回承诺的工厂,如下所示: var commonModule = angular.module("CommonModule", []) .factory('AjaxFactory', function($http, $q, $dialogs, transformRequestAsFormPost) { return { post: function(reqUr

我刚刚开始学习AngularJS,在理解承诺方面遇到了问题。我有 调用后端服务器并返回承诺的工厂,如下所示:

    var commonModule = angular.module("CommonModule", [])
      .factory('AjaxFactory', function($http, $q, $dialogs, transformRequestAsFormPost) {
        return {
          post: function(reqUrl, formData) {
              var deferred = $q.defer();
              $http({
                  method: "post",
                  url: reqUrl,
                  transformRequest: transformRequestAsFormPost,
                  data: formData
              }).success(function(data) {
                  if (data['error']) {
                      if (data['message']) {
                          $dialogs.notify('Error', data['message']);
                      } else {

                      }
                  } else if (data['success']) {
                      if (data['message']) {
                          $dialogs.notify('Message', data['message']);
                      }
                  } else if (data['validation']) {
                  }
                  deferred.resolve(data);
              }).error(function(data) {
                  $dialogs.notify('Error', 'Unknown Error. Please contact administrator');
              });
              return deferred.promise;
          }
      };
  })
  .factory("transformRequestAsFormPost", function() {
      function transformRequest(data, getHeaders) {
          var headers = getHeaders();
          headers[ "Content-type" ] = "application/x-www-form-urlencoded; charset=utf-8";
          return(serializeData(data));
      }
      return(transformRequest);

      function serializeData(data) {
          if (!angular.isObject(data)) {
              return((data === null) ? "" : data.toString());
          }
          var buffer = [];
          for (var name in data) {
              if (!data.hasOwnProperty(name)) {
                  continue;
              }
              var value = data[ name ];
              buffer.push(
                encodeURIComponent(name) +
                "=" +
                encodeURIComponent((value === null) ? "" : value)
                );
          }
          var source = buffer
            .join("&")
            .replace(/%20/g, "+")
            ;
          return(source);
      }
  }
  );
我有一个控制器,它使用以下两个函数调用AjaxFactory服务

marketingCampaignModule.controller('CampaignInfoController', ['$scope', 'AjaxFactory', '$state', 'campaign', function($scope, AjaxFactory, $state, campaign) {
        $scope.init = function() {
            $scope.name = campaign['name'];
            $scope.description = campaign['description'];
            console.log($scope.mcmcid);
            if ($scope.mcmcid > 0) {
                var inputData = {};
                inputData['mcmcid'] = $scope.mcmcid;
                var ajaxPromise1 = AjaxFactory.post('index.php/mcm/infosave/view', inputData);
                ajaxPromise1.then(function(data) {
                    if (data['success']) {
                        $scope.name = data['params']['name'];
                        $scope.description = data['params']['description'];
                    }
                },
                  function(data) {
                      if (data['success']) {
                          $scope.name = data['params']['name'];
                          $scope.description = data['params']['description'];
                      }
                  }
                );
            }
        };
        $scope.init();
        $scope.submitForm = function(isValid) {
            if (isValid) {
                var formData = $scope.prepareFormData();
                var ajaxPromise = AjaxFactory.post('index.php/mcm/infosave/save', formData);
                ajaxPromise.then(function(data) {
                    if (data['success']) {
                        $scope.setValues(data['params']);
                    } else if ('validation') {
                        $scope.handleServerValidationError(data['message']);
                    }
                });
            }
        };

        $scope.prepareFormData = function() {
            mcmcId = '';
            var formData = {};
            if ($scope.mcmcid > 0) {
                mcmcId = $scope.mcmcid;
            }
            formData["mcmcid"] = mcmcId;
            formData["name"] = $scope.name;
            formData["description"] = $scope.description;
            return formData;
        };

        $scope.setValues = function(data) {
            $scope.mcmcid = data['mcmcid'];
            $state.go('TabsView.Companies');
        };
        $scope.handleServerValidationError = function(validationMessages) {
            alert(validationMessages['name']);
        };

    }]);
承诺ajaxPromise在函数$scope.submitform中得到解析,但在$scope.init中没有解析


请告诉我缺少什么。

添加到您的服务中。错误时拒绝:

app.factory('AjaxFactory', function($http, $q, $dialogs, transformRequestAsFormPost) {
        return {
          post: function(reqUrl, formData) {
              var deferred = $q.defer();
              $http({
                  method: "post",
                  url: reqUrl,
                  transformRequest: transformRequestAsFormPost,
                  data: formData
              }).success(function(data) {
                  if (data['error']) {
                      if (data['message']) {
                          $dialogs.notify('Error', data['message']);
                      } else {

                      }
                  } else if (data['success']) {
                      if (data['message']) {
                          $dialogs.notify('Message', data['message']);
                      }
                  } else if (data['validation']) {
                  }
                  deferred.resolve(data);
              }).error(function(data) {
                  deferred.reject(data)
                  $dialogs.notify('Error', 'Unknown Error. Please contact administrator');
              });
              return deferred.promise;
          }
      };
  });
在您的控制器中处理错误:

$scope.init = function () {
    $scope.name = campaign['name'];
    $scope.description = campaign['description'];
    console.log($scope.mcmcid);
    if ($scope.mcmcid > 0) {
        var inputData = {};
        inputData['mcmcid'] = $scope.mcmcid;
        var ajaxPromise1 = AjaxFactory.post('index.php/mcm/infosave/view', inputData);
        ajaxPromise1.then(function (data) {
            if (data['success']) {
                $scope.name = data['params']['name'];
                $scope.description = data['params']['description'];
            }
        },

        function (data) {
            if (data['success']) {
                $scope.name = data['params']['name'];
                $scope.description = data['params']['description'];
            }
        },
//on error
        function (data) {
            alert("error");
            console.log(data);

        });
    }
};

欢迎来到StackOveflow!您是否输入if语句并获取ajaxPromise1=。。。。有价值吗?因为从第一眼看你的工厂valid@MaximShoustin是的,我喜欢。调试执行达到ajaxPromise1。然后,但不在其内部进行。你的意思是你甚至不进入工厂?我进入工厂。但我从未接触过数据;您是否尝试在工厂内部的错误回调中设置断点?因为从第一眼看,如果你进入了错误回调,你并没有解决延迟的问题。你可以用错误信息解决延迟的问题,也可以用理由拒绝承诺。查看他在原始帖子中的评论。他也没有到达错误回调。另外,如果你阅读了每一条评论,你会注意到你发布的答案已经被推荐了。