我将数据发布到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;
})
控制器
答案 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
答案 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;
}