2016-07-30 11 views
0

Ich erstellte RESTapi in Codeigniter, die bis jetzt gut funktionieren. Aber heute, zurückgegebene Daten ist etwas völlig verwirrt, wenn ich API über angular aufrufen. Ich benutze das erste Mal nicht eckig, aber jetzt kann ich nicht verstehen, wo ich Fehler mache. Ich schließe, dass das Problem in eckigen ist, denn wenn ich Anfrage von "Postbote" senden, ist das Ergebnis, was ich erwarte.

Mein Angular-Controller ist dies:

.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(); ?>"; 
 
    }); 
 
    }); 
 

 

 
});

Es ist Inline-Editor für einige Sportergebnisse. Wenn APP startet, rufen wir sendHttpRequest (getData) auf und das funktioniert gut. Wenn ich versuche, Fehler durch Änderung der URL in der Anfrage zu simulieren, wird die Fehlerfunktion zurückgegeben und "swal" zeigt einen Fehler an.

Problem ist in vm.save-Funktion. Wenn ich es mit allen korrekten Parametern anrufe, würden Daten in meiner Datenbank ohne Fehler gespeichert werden. Aber wenn ich versuche, Fehler durch Änderung URL zu simulieren oder Rückkehr Fehler durch RESTapi-Controller Rückkehr Ergebnis ist verwirrt.
Anstelle von Funktion (Fehler) würde Funktion (x) ausgeführt werden und vollständig falsches Ergebnis (Ergebnis von vm.games) ausgeben. REST-Rückgabe 405 Methode Nicht zulässig in Beispiel, wo ich URL zu falsch ODER 400/500 ändern, wenn ich erzwinge REST controler, um Fehler zurückzugeben.

+0

Versuchen Sie 'var deferred = $ q.defer();' innerhalb der 'sendHttpRequest' Funktion? Oder Sie verwenden immer das Versprechen, das durch die erste Anfrage gelöst wurde. – MMhunter

+0

Putting ** var zurückgestellt = $ q.defer(); ** innerhalb ** sendHttpRequest ** das Problem lösen :) thnx man. Wie kann ich dich aufrüsten? – klaun

+0

kopieren eingefügt meine antwort: D – MMhunter

Antwort

0

Versuchen Sie Put var deferred = $ q.defer(); innerhalb sendHttpRequest Funktion.

Oder Sie verwenden immer das Versprechen, das durch die erste Anfrage gelöst wurde.