AngularJS
Żądanie $ http
Szukaj…
Używanie $ http wewnątrz kontrolera
Usługa $http
to funkcja, która generuje żądanie HTTP i zwraca obietnicę.
Ogólne zastosowanie
// Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
Użycie wewnątrz kontrolera
appName.controller('controllerName',
['$http', function($http){
// Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
}])
Metody skrótów
Usługa $http
ma również metody skrótów. Przeczytaj o metodach http tutaj
Składnia
$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);
Metody skrótów
- $ http.get
- $ http.head
- $ http.post
- $ http.put
- $ http.delete
- $ http.jsonp
- $ http.patch
Korzystanie z żądania $ http w usłudze
Żądania HTTP są szeroko stosowane wielokrotnie w każdej aplikacji internetowej, dlatego dobrze jest napisać metodę dla każdego wspólnego żądania, a następnie użyć jej w wielu miejscach w aplikacji.
Utwórz httpRequestsService.js
httpRequestsService.js
appName.service('httpRequestsService', function($q, $http){
return {
// function that performs a basic get request
getName: function(){
// make sure $http is injected
return $http.get("/someAPI/names")
.then(function(response) {
// return the result as a promise
return response;
}, function(response) {
// defer the promise
return $q.reject(response.data);
});
},
// add functions for other requests made by your app
addName: function(){
// some code...
}
}
})
Powyższa usługa wykona żądanie get wewnątrz usługi. Będzie to dostępne dla każdego kontrolera, w którym wstrzyknięto usługę.
Przykładowe użycie
appName.controller('controllerName',
['httpRequestsService', function(httpRequestsService){
// we injected httpRequestsService service on this controller
// that made the getName() function available to use.
httpRequestsService.getName()
.then(function(response){
// success
}, function(error){
// do something with the error
})
}])
Korzystając z tego podejścia, możemy teraz używać httpRequestsService.js w dowolnym czasie i na dowolnym kontrolerze.
Czas żądania $ http
Żądania $ http wymagają czasu, który różni się w zależności od serwera, niektóre mogą potrwać kilka milisekund, a niektóre nawet kilka sekund. Często czas niezbędny do odzyskania danych z żądania jest krytyczny. Zakładając, że wartością odpowiedzi jest tablica nazw, rozważ następujący przykład:
Błędny
$scope.names = [];
$http({
method: 'GET',
url: '/someURL'
}).then(function successCallback(response) {
$scope.names = response.data;
},
function errorCallback(response) {
alert(response.status);
});
alert("The first name is: " + $scope.names[0]);
Dostęp do $scope.names[0]
tuż pod żądaniem $ http często powoduje błąd - ten wiersz kodu jest wykonywany przed otrzymaniem odpowiedzi z serwera.
Poprawny
$scope.names = [];
$scope.$watch('names', function(newVal, oldVal) {
if(!(newVal.length == 0)) {
alert("The first name is: " + $scope.names[0]);
}
});
$http({
method: 'GET',
url: '/someURL'
}).then(function successCallback(response) {
$scope.names = response.data;
},
function errorCallback(response) {
alert(response.status);
});
Korzystając z usługi $ watch , uzyskujemy dostęp do tablicy $scope.names
tylko po otrzymaniu odpowiedzi. Podczas inicjalizacji funkcja jest wywoływana, mimo że $scope.names
została zainicjowana wcześniej, dlatego konieczne jest sprawdzenie, czy newVal.length
jest różna od 0. Pamiętaj - wszelkie zmiany wprowadzone w $scope.names
uruchomią funkcję zegarka.