У меня есть таблица из 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
Я решил, часть проблемы была тем, что вы упомянули – proktovief