7
votes

$ Cache de service HTTP lorsque la méthode est post

Lorsque j'ai défini les demandes $ HTTP sur cache, je vois toujours des demandes en double (avec la même URL et les mêmes données) envoyées au serveur à partir du réseau de navigateur,

$http.post(url, data, {cache:true} ).success(function(response) {
  • Est-ce un bon comportement? li>
  • pouvons-nous cacher des demandes postales? li>
  • Est-ce la bonne façon de le faire ou devrais-je le faire manuellement avec le $ CACHEFACTORY? LI> ul> p>


0 commentaires

3 Réponses :


1
votes

Je ne suis pas sûr du cache qui fonctionne. Mais vous pouvez utiliser $ CACHEFACTORY pour la même chose.

app.factory('Cache', function ($cacheFactory) {
    return $cacheFactory('Cache');
});

app.controller('MyController', function ($scope, $http, Cache) {
    $http.post(url, data, {cache:Cache} ).success(function(response) {}
});


1 commentaires

@Pankajparkar oui. Mais cela ne fonctionnera pas à la post-appel. Vient de trouver une note à ce sujet.



8
votes

du Docs :

Seulement obtenir des demandes JSONP et JSONP sont mises en cache.

Si vous souhaitez mettre en cache post-requêtes, vous devrez le faire manuellement. Vous devrez faire un service / usine qui met en cache les réponses et sert de couche avant $ http. Vous pouvez utiliser $ cachefactory ou juste un objet simple. xxx

C'est un exemple simple, vous pouvez bien sûr utiliser le même principe et faire un Service plus généralisé qui prend une URL, post-data et un objet de cache et renvoie une fonction qui la demande et la met en cache.


1 commentaires

Bien expliqué, merci Daniel



0
votes

Documentation angularjs mentionne que :

Seulement obtenir des demandes JSONP et JSONP sont mises en cache.

$ http.get (URL, {cache: true}) cache la réponse HTTP dans l'objet de cache par défaut (créé avec $ cachefactory) . .

éléments sur le $ CACHEFACTORY sont stockés sous la valeur paires de la valeur de clé . L'URL spécifiée sur l'objet $ HTTP est utilisée comme clé pour la valeur mise en cache (à renvoyer). C'est l'une des raisons pour lesquelles cela fonctionne bien avec obtenez , qui dépend seulement de l'URL étant touchée.

dans le cas d'un Demande de message , les données envoyées affecteront également la réponse en plus de l'URL à être touchée, ce qui rend la mise en cache A Publier demande beaucoup plus complexe (depuis le La demande devra également faire partie de la clé). Du W3 Spécifications :

La fonction réelle effectuée par la méthode postale est déterminée par le serveur et est généralement dépendant de la demande-URI.

L'action effectuée par la méthode postale pourrait ne pas entraîner une ressource qui peut être identifié par une URI.

Les réponses à cette méthode ne sont pas cachables, à moins que la réponse Comprend des champs de contrôle du cache appropriés ou expire les champs d'en-tête.

Si vos données sont simples, Cette donc lien pourrait s'avérer un peu utile.


0 commentaires