AngularJS: Comment puis-je mettre en cache les données json retourné à partir de $http appel?
Comment puis-je mettre en cache les données json retourné à partir de $http appel. J'utilise le style suivant de $appel http:
$http({
url: 'SomeWebMethodUrl',
method: "POST",
data: "{'query':'somevalue'}",
headers: { 'Content-Type': 'application/json' }
}).success(function (data, status, headers, config) {
//something in success
}).error(function (data, status, headers, config) {
//something in error
});
J'ai regardé le tutoriel suivant: https://coderwall.com/p/40axlq sur le serveur de mise en cache de la réponse à partir de $http appel. Mais c'est expliquer $http.get (), le style et les données en cache et ne fera pas de second $http demander si l'URL absolue est la même.
Puis-je utiliser la mise en cache avec mon style de $http appeler quand mon "données" de la propriété est de même pour les même webmethod appels à l'avenir? Je suis à l'aide de ASP.net ASMX webservice pour mon WebMethods.
- En double? stackoverflow.com/questions/14117653/...
- Merci @allenhwkim j'ai essayé avec cache:paramètre true, mais le $http appel est toujours en cours sur chaque appel (et je ne suis pas à l'actualisation du navigateur et de l'appeler encore et encore sur certains boutons de la souris).
Vous devez vous connecter pour publier un commentaire.
L'angular.js le cache est conçu pour HTTP REÇOIS des appels uniquement. Ceci est cohérent avec l'objectif du protocole HTTP, HTTP, les serveurs n'ont pas l'habitude de regarder au-delà de l'URL, la Méthode HTTP, et de mettre en Cache en-têtes de Contrôle afin de déterminer si elles peuvent répondre à une demande avec le contenu mis en cache. En conséquence, les auteurs de l'angulaire de ne pas étendre les fonctionnalités de mise en cache d'autres méthodes HTTP.
Une autre façon de voir les choses, c'est que l'angle $service de cache est vraiment juste une simple valeur de la clé de magasin, avec l'URL de la demande en agissant comme une clé et la réponse à la requête HTTP GET la valeur qui est stockée localement sur le serveur.
Quand vous pensez à elle de cette façon, il devient clair pourquoi il est plus difficile de mettre en cache la réponse à une requête POST. Le contenu retourné par la POSTE à la demande ne dépend pas seulement de l'URL, mais le contenu Affiché. De cache dont le résultat est la valeur de la clé de magasin, vous besoin d'un mécanisme pour créer une clé unique qui identifie à la fois les URL et les données passées.
Si vous avez des données est assez simple, ma suggestion est d'écrire votre propre cache qui est vérifié avant d'utiliser l'angle $service http. Sans en savoir plus sur votre méthode de données, je ne peux pas vous donner un exemple complet, mais vous pourriez faire quelque chose comme ceci:
Vous serait alors de remplacer ce service wrapper où vous utilisez actuellement le raw $service http.
Le point est à mettre en œuvre votre propre cache qui comprend le 'url+données" en tant que clé avant d'appeler le $service http.
$httpProvider.interceptors.push(function(){return {'request': function(config) { /*Cache Magic*/ });
L'utilisation de la requête POST utilisés pour ajouter de nouveaux enregistrements dans la banque de données, PUT et DELETE modifier le statut de la banque de données. Et ça n'a pas de sens à encaisser n'importe quel d'entre eux.
OBTENEZ seulement de récupérer des données sans modifier magasin de données. Et ce qui fait sens pour les espèces réponse.