从工厂的控制器中获取AngularJS HTTP post调用中的数据

时间:2016-02-03 16:18:58

标签: angularjs factory

我将数据发布到Python API,API响应返回我想在控制器中使用的数据,最终返回与该视图关联的HTML部分中的数据。我能够成功获取数据,因为我正在从调用中记录response.data,但是当我从控制器调用该方法时,我收到一条错误,指出无法读取“then”未定义的属性。

 function getCustomerGraphData(payload, config) {

        var data = {
            user_selection: JSON.stringify(payload),
            index_info: JSON.stringify(config.index_info),
            column_config: JSON.stringify(config.Results)
        };

        console.log("data", data);

        $http({
            url: 'URL',
            method: "POST",
            data: $.param(data),
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }).then(function(response) {
            var customer = response.data;

            console.log("data", customer);

            return customer;
        });

    }

服务

 arisService.getCustomerGraphData()
        .then(function(data){
            $scope.overIndexData = data;
        })

控制器

3 个答案:

答案 0 :(得分:1)

确保您的服务返回promise,以便您可以调用then方法,查看$q function getCustomerGraphData(payload, config, $q) { // initialize the defer object var deferred = $q.defer(); var data = { user_selection: JSON.stringify(payload), index_info: JSON.stringify(config.index_info), column_config: JSON.stringify(config.Results) }; console.log("data", data); $http({ url: 'URL', method: "POST", data: $.param(data), headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function(response) { var customer = response.data; console.log("data", customer); // resolve the promise with your data deferred.resolve(customer); }); // return the promise return deferred.promise; } 以获取有关承诺的更多信息:

<project name="my-project">
  <!-- if this is the top-level build.xml, ${self} == "" -->
  <condition property="self" value="">
    <equals arg1="${ant.project.name}" arg2="my-project" />
  </condition>
  <!-- if this is an included build.xml, ${self} == "my-project." -->
  <property name="self" value="my-project." /><!-- note the trailing dot -->
  ...

答案 1 :(得分:0)

在您的服务中,您应该返回http调用创建的承诺。

return $http(...)

然后,您将有一个承诺,可以根据需要在控制器中访问回调。

如果您从角色开始,可能需要阅读有关承诺的内容,因为它们经常被使用。

Angular factory returning a promise

http://weblog.west-wind.com/posts/2014/Oct/24/AngularJs-and-Promises-with-the-http-Service

Processing $http response in service

Angular docs about $q service

答案 2 :(得分:0)

在工厂内注入$q作为依赖项,然后宣传您的方法,

function getCustomerGraphData(payload, config) {
        var deferred = $q.defer();
        var data = {
            user_selection: JSON.stringify(payload),
            index_info: JSON.stringify(config.index_info),
            column_config: JSON.stringify(config.Results)
        };

        console.log("data", data);

        $http({
            url: 'URL',
            method: "POST",
            data: $.param(data),
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }).then(function(response) {
            var customer = response.data;
            deferred.resolve(customer);
            console.log("data", customer);

            return customer;
        });
      return deferred.promise;
    }