2016-03-23 4 views
0

У меня есть таблица из JSON, есть кнопка на каждой строке, и когда вы нажимаете ее, вызывается веб-служба, передающая идентификатор элемента. Веб-службы пытаются удалить элемент из базы данных, если он может быть удален, возвращает простой JSON с атрибутом атрибута и двумя возможными значениями «ERASED» (если удалено) или «IN_USE» (если нет). Когда я нажимаю на кнопку, веб-служба отвечает нормально («IN_USE» на самом деле). Но когда я пытаюсь прочитать значение «status» для показа сообщения (в зависимости от того, является ли оно «IN_USE» или «ERASED»), он возвращает меня «неопределенный» и не знает почему. Я делаю некоторые трюки, но все равно не работаю. Я также сделал веб-службы с тонкой структуры 2.Parsing json on Angular

Контроллер (только функция с неприятностями):

$scope.show = function (id) { 
        $http.get('http://10.0.203.73/WS/ws.php/tipusactius/edita/elimina/' + id + '.json').success(function (data) { 
         $scope.sts = data.status; 
         $window.alert($scope.sts); 
        }); 

        if ($scope.sts.status == 'IN_USE') { 
         $window.alert('Aquest atribut no es pot eliminar perque és en ús'); 
        } 

       } 

Существует веб-сервис (это делается с стройной рамки 2):

$app->get('/tipusactius/edita/elimina/:id.json', function($id){ 
    header("Content-Type: application/json"); 
    $SQL = 'DELETE FROM atributs_actiu WHERE idatributs_actiu = '.$id; 
    error_log('DELETE STATEMENT: '.$SQL, 0); 
    $mysqli = getDB(); 
    $r = $mysqli->query($SQL); 
    error_log(mysqli_error($mysqli)); 
    if(!$r){ 
     $results[] = array('status' => 'IN_USE'); 
    } 
    else{ 
     $results[] = array('status' => 'ERASED'); 
    } 

    echo json_encode($results); 
}); 

Веб-службы работают нормально, но я получаю неопределенный на консоли, когда я пытаюсь проверить значение статуса.

Решено:

Там было две ошибки на этом: 1-The Funciton является асинхронным, так что даже я получаю что-то от сервера сообщение может быть еще «не определено» 2-я не был кэширование значения «status» соответствующим образом.

Это, как я сделал это в конце концов: $ scope.sts [0] .status

Все это в $ http.get функции, как сказал Мариус Wirtherle:

Ваша проблема, вероятно, что $ http Request выполняется как асинхронно. Таким образом, запрос еще не закончена, когда вы делаете $ window.alert

Измените код, как это использовать ждать $ Http обещают Resolve:

$scope.show = function(id){ 
    $http.get('http://10.0.203.73/WS/ws.php/tipusactius/edita/elimina/' + 

идентификатор + «.json») . Then (function (response) {// success callback (.success устарел) $ scope.sts = response.data.status; if ($ scope.sts == 'IN_USE') { $ window. alert («Активный атрибут no es pot excinar perque és en ús»); } }, функция (ответ) {// ошибка callb ack $ window.alert (response.statusText); }); }

Дальнейшее чтение на $ HTTP: https://docs.angularjs.org/api/ng/service/ $ HTTP

ответ

1

Ваша проблема, вероятно, что $ HTTP запрос выполняется асинхронно. Таким образом, запрос еще не закончен, когда вы делаете окно $.Оповещение

изменить код так, чтобы использовать ждать $ Http пообещали решить:

$scope.show = function(id){ 
    $http.get('http://10.0.203.73/WS/ws.php/tipusactius/edita/elimina/' + id + '.json') 
    .then(function(response){ // success callback (.success is deprecated) 
    $scope.sts = response.data.status; 
    if ($scope.sts == 'IN_USE') { 
     $window.alert('Aquest atribut no es pot eliminar perque és en ús'); 
    } 
    }, function(response){ //error callback 
    $window.alert(response.statusText); 
    }); 
} 

Дальнейшее чтение на $ Http: https://docs.angularjs.org/api/ng/service/$http

(Также я думаю, что у вас есть .status гораздо в вашем коде. Один на линии $scope.sts = data.status;, а затем в if($scope.sts.status == ...).Поэтому его в основном data.status.status)

+0

Я решил, часть проблемы была тем, что вы упомянули – proktovief