Ne pouvez pas désactiver le cache jQuery
Mise à jour
J'ai compris qu'il faut problème de mise en cache, mais je ne peux pas tourner mémoire cache.
Voici ma changé script:
<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery.ajaxSetup({
//Disable caching of AJAX responses
cache: false
});
jQuery("#button1").click(function (e) {
window.setInterval(refreshResult, 3000);
});
function refreshResult()
{
jQuery("#divResult").load("/Home/Refresh");
}
</script>
Il met à jour une partie d'une page web toutes les 3 sec. Il ne fonctionne qu'une fois, après compensation cache du navigateur web, après qu'il ne fonctionne pas - les demandes sont faites à la Maison /Actualiser sans intervalle de 3 secondes, de données est envoyé à partir du serveur, mais rien n'est affiché sur la page web; les demandes ultérieures envoyer cookie ASP.NET_SessionId=wrkx1avgvzwozcn1frsrb2yh.
Je suis à l'aide de ASP.NET MVC 2 et c#.
J'ai un problème avec jQuery, voici comment mon application web fonctionne
- De recherche.aspx page web qui contient un formulaire et le script jQuery postes de données de Recherche() dans la Maison contrôleur lorsque l'utilisateur clique sur bouton button1.
De recherche.aspx:
<%@ Page Title="" Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<GLSChecker.Models.WebGLSQuery>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Title
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Search</h2>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
<fieldset>
<div class="editor-label">
<%: Html.LabelFor(model => model.Url) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Url,
new { size = "50" } ) %>
<%: Html.ValidationMessageFor(model => model.Url) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Location) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Location,
new { size = "50" } ) %>
<%: Html.ValidationMessageFor(model => model.Location) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.KeywordLines) %>
</div>
<div class="editor-field">
<%: Html.TextAreaFor(model => model.KeywordLines, 10, 60, null)%>
<%: Html.ValidationMessageFor(model => model.KeywordLines)%>
</div>
<p>
<input id ="button1" type="submit" value="Search" />
</p>
</fieldset>
<% } %>
<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery("#button1").click(function (e) {
window.setInterval(refreshResult, 5000);
});
function refreshResult()
{
jQuery("#divResult").load("/Home/Refresh");
}
</script>
<div id="divResult">
</div>
</asp:Content>
[HttpPost] public ActionResult de Recherche(WebGLSQuery queryToCreate) { if (!ModelState.IsValid) retour à la Vue("Recherche"); queryToCreate.Remote_Address = HttpContext.Demande.ServerVariables["REMOTE_ADDR"]; Session [""] = null; SearchKeywordLines(queryToCreate); Fil de discussion.Sommeil(15000); retour à la Vue("Recherche"); }//Search()
-
Après button1 bouton est cliqué sur le script ci-dessus à partir de la Recherche.aspx page web s'exécute.
-
Action rechercher() dans le contrôleur exécute pour la plus longue période de temps. Je simule
cela dans le test en mettant le Fil de discussion.Sommeil(15000); dans l'action Rechercher (). -
5 sec. après la soumission, le bouton a été pressé, le ci-dessus script jQuery appels
Refresh() dans la Maison de contrôleur.
public ActionResult Refresh() { ViewData [""] = DateTime.Maintenant; retour PartialView(); }
- Refresh() rend cette partielle
<%@ Control Language="C#"
Inherits="Le Système De.Web.Mvc.ViewUserControl"
%><%= ViewData [""] %>
Le problème est que dans Internet Explorer 8, il est seulement une demande pour le /Home/Actualiser;
dans Firefox 3.6.3 toutes les demandes à la Maison /de l'Actualisation sont faites, mais rien n'est affiché sur la page web. Un autre problème avec Firefox, c'est que les demandes à la Maison /de l'Actualisation sont effectuées chaque seconde de ne pas toutes les 5 secondes.
J'ai remarqué qu'après je effacer le cache de Firefox le script fonctionne bien la première fois button1 est pressé, mais après cela, il ne fonctionne pas.
Je vous serais reconnaissant de suggestions utiles.
OriginalL'auteur robert_d | 2010-05-25
Vous devez vous connecter pour publier un commentaire.
C'est un peu une vieille question maintenant. Mais j'ai eu un problème que j'ai pensé était liée à la mise en cache, mais s'est avéré être quelque chose d'autre et j'ai pensé que quelqu'un à un certain point peut s'avérer utile.
J'ai eu un ensemble de routines qui disait quelque chose comme
PAGE PRINCIPALE des appels de SOUS-PAGE, via .de la charge.
SOUS PAGE a table pour l'entrée de données
et des liens hypertexte pour le coup d'envoi de SQL PAGE pour exécuter sql
Suite à la saisie de données dans une SOUS-PAGE
(via la PAGE PRINCIPALE), cliquez sur le lien hypertexte
les mises à jour de la base de données à l'aide de SQL, puis actualise la PAGE
PAGE PRINCIPALE div qui contient une SOUS-PAGE
Bien ... pendant des heures, j'ai gardé la saisie des données, puis en cliquant sur les liens pertinents seulement pour trouver que la PAGE PRINCIPALE div parfois rafraîchie, parfois, n'ont pas. F5 toujours fonctionné bien. Si j'étais sûr que j'avais un problème de cache. J'ai donc arrêté de l'utiliser .charge et commencé à l'utiliser .ajax, à l'aide de la "cache: false'. J'ai pu voir que .ajax était maintenant suffisamment aléatoire le get de l'url, mais encore ma PAGE PRINCIPALE div n'a pas été rafraîchissant. J'étais certain que j'avais un problème de mise en cache ...
Mais je n'ai pas.
À l'aide de Google outils de développement de Chrome - j'ai pu voir que parfois mon jQuery routine était en train de faire exactement ce qu'il était censé faire, c'est à dire
a) Cliquez sur une SOUS-PAGE; execute SQL PAGE; actualisation de la PAGE PRINCIPALE div
Et, parfois, les choses qui s'est passé dans cet ordre ...
b) Cliquez sur une SOUS-PAGE, actualisation de la PAGE PRINCIPALE div; execute SQL PAGE
Mon code a été écrit pour faire un), mais parce que SQL PAGE a fallu un certain temps à s'exécuter, b) a été fait de ce qui se passait. Et b) a été mauvais - ma PAGE PRINCIPALE div était en fait rafraîchissante, mais le SQL pour mettre à jour mes tableaux de données n'était pas l'exécution avant l'actualisation.
Une fois que j'ai réalisé cela, le correctif a été facile. À l'aide de .ajax, j'ai mis en place la logique suivante:
i) Cliquez sur une SOUS-PAGE
ii) Exécuter SQL PAGE
iii) la condition que le succès de l'exécution du SQL PAGE (en utilisant le 'succès:" option .ajax), puis actualisez la PAGE PRINCIPALE div contenant une SOUS-PAGE
iv), j'ai quitté le "cache: false," à la place, juste au cas où
Ce correctif fonctionne 100% du temps pour mon code
Donc, si vous arracher les cheveux à essayer de comprendre en quoi la mise en cache ne s'éteindra pas, assurez-vous juste que vous avez réellement un problème de mise en cache et non pas le problème que j'ai décrit ci-dessus.
Bonne chance
OriginalL'auteur psmail
Vous pouvez modifier l'URL que vous demandez par l'ajout d'un timestamp dans le cadre de la
GET
paramètres:Cela devrait ignorer le cache de votre navigateur (l'url est en train de changer à chaque fois). Bien sûr - c'est ce que le réglage de l'jQuery
cache
paramètre à false sur les requêtes ajax, je ne suis pas sûr à 100% que.load()
va utiliser ce paramètre.OriginalL'auteur gnarf
N'importe quel navigateur ajax manipulation. Jamais mis en cache.
OriginalL'auteur Heroselohim
La IE8 problème pourrait être que IE caches des demandes similaires, mais je ne suis pas trop familier avec JQueries internes s'ils gérer cela ou pas, une solution pourrait être d'ajouter un hasard obtenir var.
jQuery("#divResult").load("/Home/Actualiser?"+Les mathématiques.floor(Math.random()*100000000)); par exemple
Il fonctionne (dans IE8 et Firefox) première fois après la libération cache du navigateur web, mais les présentations subséquentes ne fonctionnent pas - les demandes à la Maison /de l'Actualisation sont effectuées chaque seconde de ne pas toutes les 5 secondes, et rien n'est affiché sur la page web.
Les requêtes suivantes à /Home/Actualiser utiliser un cookie ASP.NET_SessionId=cnn0mffzalceg2l5b3thztw0. J'ai désactivé le cache Cache-Control: no-cache, pas de magasin, must-revalidate Pragma: no-cache Expire: -1
Utilisation de jquery.ajaxSetup({ cache: false }) dans votre javascript pour empêcher le navigateur de mise en cache des réponses.
OriginalL'auteur TomHastjarjanto
J'ai trouvé la solution, j'ai remplacé
avec
OriginalL'auteur robert_d