2016-07-30 59 views
0

我在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控制器返回错误。

+0

尝试把'var deferred = $ q.defer();'sendHttpRequest'函数内?或者也许你总是使用第一个请求已经解决的承诺。 – MMhunter

+0

put ** var deferred = $ q.defer(); ** ** sendHttpRequest **解决问题:) thnx man。我怎么能upvote你? – klaun

+0

复制粘贴我的答案:D – MMhunter

回答

0

试着把var deferred = $ q.defer();里面有sendHttpRequest函数。

或者u总是使用第一个请求已解决的承诺。