AngularJS
$ http request
Поиск…
Использование $ http внутри контроллера
Служба $http
- это функция, которая генерирует 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.
});
Использование внутри контроллера
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.
});
}])
Методы быстрого доступа
$http
службы $http
также есть методы быстрого доступа. Читайте о http-методах здесь
Синтаксис
$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);
Методы быстрого доступа
- $ http.get
- $ http.head
- $ http.post
- $ http.put
- $ http.delete
- $ http.jsonp
- $ http.patch
Использование запроса $ http в службе
HTTP-запросы широко используются в каждом веб-приложении, поэтому целесообразно написать метод для каждого общего запроса, а затем использовать его в нескольких местах в приложении.
Создайте 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...
}
}
})
Служба, указанная выше, выполнит запрос на получение внутри службы. Это будет доступно любому контроллеру, где была введена услуга.
Пример использования
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
})
}])
Используя этот подход, мы теперь можем использовать httpRequestsService.js в любое время и в любом контроллере.
Сроки запроса $ http
Запросы $ http требуют времени, которое зависит от сервера, некоторые могут занять несколько миллисекунд, а некоторые могут занять до нескольких секунд. Часто требуется время, необходимое для извлечения данных из запроса. Предполагая, что значение ответа представляет собой массив имен, рассмотрим следующий пример:
некорректный
$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]);
Доступ к $scope.names[0]
прямо под запросом $ http часто $scope.names[0]
ошибку - эта строка кода выполняется до получения ответа от сервера.
Правильный
$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);
});
Используя службу $ watch, мы получаем доступ к массиву $scope.names
только при получении ответа. Во время инициализации функция вызывается даже при инициализации $scope.names
, поэтому проверка того, newVal.length
ли newVal.length
, отличная от 0. Имейте в $scope.names
- любые изменения, внесенные в $scope.names
функцию часов.