AngularJS
solicitud de $ http
Buscar..
Usando $ http dentro de un controlador
El servicio $http
es una función que genera una solicitud HTTP y devuelve una promesa.
Uso general
// 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.
});
Uso dentro del controlador
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.
});
}])
Métodos de acceso directo
$http
servicio $http
también tiene métodos de acceso directo. Lea acerca de los métodos http aquí
Sintaxis
$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);
Métodos de acceso directo
- $ http.get
- $ http.head
- $ http.post
- $ http.put
- $ http.delete
- $ http.jsonp
- $ http.patch
Usando la solicitud $ http en un servicio
Las solicitudes HTTP se usan ampliamente en repetidas ocasiones en todas las aplicaciones web, por lo que es aconsejable escribir un método para cada solicitud común y luego usarlo en varios lugares a lo largo de la aplicación.
Crear un 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...
}
}
})
El servicio anterior realizará una solicitud de obtención dentro del servicio. Esto estará disponible para cualquier controlador donde se haya inyectado el servicio.
Uso de la muestra
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
})
}])
Usando este enfoque, ahora podemos usar httpRequestsService.js en cualquier momento y en cualquier controlador.
Tiempo de una solicitud $ http
Las solicitudes de $ http requieren un tiempo que varía según el servidor, algunas pueden tardar unos milisegundos y otras pueden tardar unos segundos. A menudo, el tiempo requerido para recuperar los datos de una solicitud es crítico. Suponiendo que el valor de la respuesta es una matriz de nombres, considere el siguiente ejemplo:
Incorrecto
$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]);
El acceso a $scope.names[0]
justo debajo de la solicitud $ http a menudo generará un error: esta línea de código se ejecuta antes de que se reciba la respuesta del servidor.
Correcto
$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);
});
Usando el servicio $ watch , accedemos a la matriz $scope.names
solo cuando se recibe la respuesta. Durante la inicialización, la función se llama aunque $scope.names
se haya inicializado antes, por lo tanto, verificar si newVal.length
es diferente de 0 es necesario. Tenga en cuenta que cualquier cambio realizado en $scope.names
activará la función de observación.