Angular $ http返回混淆回复
问题描述:
我在Codeigniter中创建了RESTapi,迄今为止工作正常。但是今天,当我通过角度调用API时,返回的数据是完全混淆的。我不是第一次使用角度,但现在我无法理解我犯的错误。 我的结论是问题是角度的,因为当我发送“邮递员”的请求时,结果就是我所期望的。
我的角度控制器是这样的:
.controller('adminCtrl', function($http, $q, NgTableParams) {
var vm = this;
var deferred = $q.defer();
vm.selected = {};
sendHttpRequest = function(req) {
$http(req).success(function successCallback(response, status) {
deferred.resolve(response);
})
.error(function errorCallback(error) {
deferred.reject(error);
});
return deferred.promise;
};
vm.editGame = function(game) {
vm.selected = angular.copy(game);
};
vm.reset = function() {
vm.selected = {};
};
vm.getTemplate = function(game) {
if (game.gameId === vm.selected.gameId){
return 'edit';
}
else return 'display';
};
vm.save = function(idx) {
var updateData = {
method: 'POST',
url: "<?php echo base_url('api/updateResult'); ?>",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-API-KEY': "<?php echo $userInfo['API_Key']; ?>"
},
data: {
'gameId': vm.selected.gameId,
'homeSaves': vm.selected.homeSaves,
'awaySaves': vm.selected.awaySaves
}
};
console.log(updateData);
sendHttpRequest(updateData).then(function(x) {
console.log(x);
vm.games[idx] = angular.copy(vm.selected);
vm.reset();
}, function(error) {
swal({
title: "Error!",
text: error,
type: "error",
confirmButtonText: "OK!",
closeOnConfirm: true
}, function() {
vm.reset();
//window.location.href = "<?php echo base_url(); ?>";
});
});
};
var getData = {
method: 'GET',
url: "<?php echo base_url('api/result'); ?>",
headers: {
'X-API-KEY': "<?php echo $userInfo['API_Key']; ?>"
}
};
sendHttpRequest(getData).then(function(data) {
_.forEach(data, function(o) {
o.homeSaves = parseInt(o.homeSaves);
o.awaySaves = parseInt(o.awaySaves);
});
vm.games = data;
}, function(error) {
swal({
title: "Error!",
text: error,
type: "error",
confirmButtonText: "OK!",
closeOnConfirm: true
}, function() {
window.location.href = "<?php echo base_url(); ?>";
});
});
});
它是一些体育比赛结果行内编辑器。 当APP启动时,我们调用sendHttpRequest(getData),这很好。如果我试图通过在请求中更改url来模拟错误,则将返回错误函数,并且“swal”将显示错误。
问题出在vm.save函数中。如果我把它称为白所有正确的参数,数据将被保存在我的数据库中,没有错误。但是,如果我尝试通过更改url或强制返回错误来模拟错误,则RESTapi控制器返回的结果令人困惑。
而不是函数(错误),函数(x)将被执行并打印完全错误的结果(vm.games的结果)甚至REST返回405方法不允许在例子中,当我更改url为错误或400/500当我强制REST控制器返回错误。
答
试着把var deferred = $ q.defer();里面有sendHttpRequest函数。
或者u总是使用第一个请求已解决的承诺。
尝试把'var deferred = $ q.defer();'sendHttpRequest'函数内?或者也许你总是使用第一个请求已经解决的承诺。 – MMhunter
put ** var deferred = $ q.defer(); ** ** sendHttpRequest **解决问题:) thnx man。我怎么能upvote你? – klaun
复制粘贴我的答案:D – MMhunter