2016-03-23 51 views
0

我有一个JSON表,每行都有一个按钮,当你点击它时调用一个传递元素ID的Web服务。 Web服务试图从数据库中删除元素,如果它可以被删除,返回一个简单的带有'at status'状态的JSON和两个可能的值'ERASED'(如果删除)或'IN_USE'(如果不是)。当我点击按钮时,Web服务回复正常(实际上是'IN_USE')。但是,当我尝试读取显示消息的“状态”值(取决于它是'IN_USE'还是'ERASED')时,它会返回“未定义”并且不知道为什么。我一直在做一些技巧,但仍然不起作用。我也做了与纤薄框架2.解析JSON角

控制器(只是烦恼的功能)的Web服务:

$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); 
}); 

$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'); 
        } 

       } 

有Web服务(它与纤细的框架2完成)

Web服务运行正常,但当我尝试检查状态值时,控制台上出现未定义的状态。

解决:

有在这种情况下,两个错误: 1的功能可按是异步的,所以即使我从服务器获取的消息可以仍然被“未定义” 2,我是不是适当地缓存“状态”值。

这是我做的最后: $ scope.sts [0] .STATUS

这一切$ http.get函数内部马吕斯Wirtherle说:

你的问题可能是$ http请求异步执行 。所以,当你做的请求还没有结束的 $ window.alert

修改代码,这样使用等待$ 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ésenús'); } },function(response){// error 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