Я создал RESTapi в Codeigniter, который работает до сих пор. Но сегодня возвращенные данные - это нечто совершенно запутанное, когда я вызываю 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 или force, возвращаемой контроллером RESTapi, результат будет запутан.
Вместо функции (ошибки) будет выполняться функция (x) и полностью напечатать неверный результат (результат vm.games) даже возврат REST 405 Метод не разрешен в примере, когда я изменяю URL-адрес на неправильный ИЛИ 400/500, когда я заставляю REST-контроллер для возврата ошибки.
Попробуйте поместить var deferred = $ q.defer(); внутри отправляемHttpRequest функция.
Или вы всегда используете обещание, которое было разрешено первым запросом.
var deferred = $q.defer();
внутри функцииsendHttpRequest
? Или, может быть, вы всегда используете обещание, которое было решено первым запросом.