2010-01-03 5 views
3

J'ai un petit script jQuery qui obtient des informations en regardant un ID.

Quel est le meilleur moyen d'empêcher que les mêmes données soient demandées plus d'une fois (par exemple, quelles sont les meilleures pratiques pour la mise en cache dans jQuery)?

J'ai essayé d'utiliser $.post et $.ajax avec l'option "cache" définie sur true, mais la demande est envoyée plus d'une fois. Est-il préférable de sauvegarder les données collectées et d'utiliser des ensembles pour voir si vous devrez le demander ou non?

Toutes les idées et suggestions sont les bienvenues!

Si cela est important, j'utilise ASP.Net MVC côté serveur.

+0

Comment est votre script jQuery décider quoi demande ? – Sampson

+0

Si l'utilisateur clique sur "Détails" sur un article, la demande sera faite (je veux que cela soit fait au plus une fois pour chaque article). – Mickel

Répondre

5

L'option cache que vous avez vue dans la documentation fait référence au cache du navigateur.

Vous pouvez mettre en œuvre un modèle de auto-mémorisation fonctions à bien des égards, l'objectif est que le résultat de la fonction de l'argument déterminé (id dans votre cas) n'est calculée une fois.

Puisque vous utilisez une requête Ajax, je vous suggère d'utiliser un argument de rappel aussi, par exemple:

var getInfo = (function() { 
    var cache = {}; // results will be cached in this object 

    return function (id, callback) { 
    if (cache[id] != null) { // if exist on cache 
     callback(cache[id]); 
     return; 
    } 
    // doesn't exists on cache, make Ajax request and cache it 
    $.post("info.url", { "id": id }, function (data) { 
     cache[id] = data; // store the returned data 
     callback(data); 
    }); 
    }; 
})(); 

Exemple d'utilisation:

getInfo(5, function (data) { 
    alert(data); 
}); 
+1

Battez-moi dessus ... Je devrais arrêter d'écrire de longues réponses ou écrire plus vite :) Vous voudriez que le cache var soit déclaré en dehors de la fonction. A l'intérieur ce ne sera pas très utile. – Ariel

+1

Merci @Ariel, en fait la variable 'cache' est en dehors de la fonction retournée, et elle est accessible via la fermeture créée par la fonction auto-exécutable. – CMS

+1

Ceci est un excellent exemple de l'une des meilleures caractéristiques de Javascript (fermetures) utilisées pour la mémoisation. Vous voulez absolument garder l'objet cache à l'intérieur d'une fermeture pour l'empêcher de fuir dans cet horrible cloaque de la portée globale. –

Questions connexes