comment faire pour effacer le cache de données lors de l'utilisation de l'ajax?
J'utilise de l'Ajax pour récupérer les données à partir du serveur en tant que ci-dessous en fonction d'une pièce d'identité pour effectuer la suggestion automatique de la fonction. cependant, quand je soumettre le formulaire et de mettre à jour la base de données, la suggestion automatique de champ supposons que ne doit pas contenir quelque chose pour cette ID plus, mais il va encore récupérer des données à partir de son cache. faire que quelqu'un sait comment faire pour effacer le cache et faire de l'Ajax envoyant une demande pour obtenir les données les plus récentes de serveur à chaque fois que j'appuie sur le bouton? Svp aider j'ai vraiment bloqué sur ce semaines entières et ne pourrais pas trouver la solution.
Par exemple: lorsque le champ ID est 00001, de suggestion automatique de champ sera 1,2,3. Après l'envoi de la forme et de la mise à jour de la base de données, lorsque je recherche 00001 à nouveau, elle ne doit pas contenir n'importe quoi, mais il le fait, il encore mettre en cache les données comme 1,2,3 dans suggèrent champ...
if (window.XMLHttpRequest)
{//code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{//code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var data=xmlhttp.responseText;
alert(data);
}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
- Êtes-vous eu ce problème avec tous les navigateurs?
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème une fois avant. C'est probablement quelque chose que vous pouvez le fixer dans les paramètres de votre serveur. Ce que le serveur n'est obtenir une demande de serveur, de construire la réponse, et lorsque la même demande est faite encore, il envoie la même réponse qu'il construit avant.
Facilement éviter ce problème, j'ai ajouté un supplément de paramètre de la requête (UID).
donc:
ce que vous avez toujours ha d'une demande unique.
RANDOMGUID
une variable comme tel:var x = Math.random()
? je vais avoir ce problème dès maintenant. il se passe lorsque j'appuie sur le bouton retour de votre navigateur, pour quelque raison que ce soit la vieilleresponseText
ne va pas loinFonctionne avec IE8
vous pouvez utiliser des en-têtes http pour empêcher la réponse de la mise en cache:
Une autre option est d'ajouter un autre paramètre à l'url qui varie à chaque fois (par exemple l'heure actuelle dans millis), de cette façon pour le navigateur que vous demandez à une autre url et le cache ne sera pas utilisé.
Meilleure chose à faire est d'utiliser jQuery#ajax et de désactiver la mise en cache.
jQuery va suffixe d'un paramètre
?somenumber
à votre appel ajax qui est juste suffisant pour convaincre le navigateur, il ne peut pas utiliser les données en cache.Je suis tombé sur cette fois. Voici la réponse que j'ai obtenu: Pourquoi jQuery.ajax() ajouter un paramètre à l'url? .
Vous pourriez faire la même chose manuellement, mais vous aurez à vérifier si l'ajout du paramètre est tout là est à lui.
Pas de code fourni, mais quelques conseils qui peuvent vous aider à gérer le compte de l'état de manière cohérente à travers de nombreux onglets, l'histoire, les appareils, etc:
Tout d'abord, la version plus condensée dans un long paragraphe:
Si vous voulez une vue cohérente pour un compte, indépendamment de l'histoire en arrière/avant, les boutons, les onglets supplémentaires ou des fenêtres supplémentaires (même avec différents IPs/appareils), vous pouvez utiliser un incrément du compteur et un battement de cœur (rythme cardiaque peuvent être mis en œuvre comme un XMLHttpRequest send() lors d'un appel setInterval configuré pour dire 2 secondes). L'incrément est géré au niveau du serveur. Le client fournit la valeur du compteur à chaque appel vers le serveur. Pour chaque requête, le serveur vérifie la valeur du compteur fourni par le client avec sa propre valeur enregistrée. Le serveur génère de la prochaine valeur du compteur, il persiste, et retourne cette valeur du compteur dans la réponse à ce client peut utiliser sur son prochain appel. Si le client à condition que ces contre-valeur, c'est une "bonne" demande. Si la valeur fournie est différent de ce que le serveur avait stocké, l'appel du client était une "mauvaise" demande. Valoriser les bonnes demandes. Le serveur ne peut en partie l'honneur des demandes douteuses. Le client est "à côté" appel pourrait être le prochain battement de coeur ou toute autre demande sur ce compte. Client plusieurs points de vue dans ce compte peuvent se chevaucher, mais essentiellement un client ne serait d'obtenir le bon appel. Tous les autres clients du mauvais côté des appels, parce que leurs contre-valeurs ne correspondent plus à ce que le serveur a stocké. Si vous utilisez un compte vue, tous les appels vers le serveur doit être un bon appel une fois que la session est lancée. [Une session peut durer lorsque le navigateur javascript maintient la valeur du compteur, mais à moins d'utiliser des cookies ou autres, vous ne pouvez pas étendre une session si la page est actualisée depuis javascript serait réinitialisé. Cela signifie que chaque premier appel de la page serait un "mauvais" appel.] Si vous utilisez l'histoire, un autre onglet, ou d'un autre dispositif, vous devriez être en mesure de l'utiliser, mais vous aurez un mauvais appel au minimum à chaque fois que vous passer de l'un à l'autre. Pour limiter ces mauvais call cas, désactivez le rythme cardiaque lorsque que la vue navigateur est inactif. Remarque, ne même pas mettre en œuvre un battement de cœur si vous n'avez pas l'esprit en montrant à l'utilisateur, éventuellement, un rassis page pendant une période prolongée ou si la page est peu probable d'être obsolète (mais cette question suppose que vous pouvez obtenir des données périmées sur le navigateur de l'utilisateur vue).
Nous allons ajouter plus de détail:
Chaque requête à un serveur à partir d'un navigateur ouvert la page fournit la valeur du compteur. Ce peut être, par exemple, lors de la soumission d'un formulaire ou au cours de javascript objet XMLHttpRequest .send().
Demandes de type à partir de la barre d'url par l'utilisateur ne peut pas avoir une valeur de compteur envoyé. Cette ouverture de session et peuvent seulement être considérés comme ayant une mauvaise valeur du nombre. Celles-ci seraient des exemples de "mauvais" appels, et devraient être traités avec autant de tact que possible, mais ne devrait pas être autorisé à mettre à jour le compte si vous voulez une vue cohérente.
Chaque demande visant à modifier le compte (un "écrivain") doit avoir fourni anticipé de la valeur du compteur (qui peut être mis à jour sur le serveur autre que le +1 si vous avez plus d'élaborer des besoins mais qui doit être prévu/unique, pour une prochaine demande). À la fin du serveur, si la valeur du compteur est de l'un prévu, puis de traiter la demande de variables normalement et permettre l'accès en écriture. Puis d'inclure dans la réponse au client la prochaine pièce de théâtre en valeur le serveur va attendre pour cette variable (par exemple, la cnt++) et à la persistance de cette valeur sur la fin du serveur (par exemple, la mise à jour de la valeur du compteur dans la base de données ou dans un serveur de fichier) afin que le serveur de la prochaine pièce de théâtre en valeur du compteur d'attendre à chaque fois que la prochaine demande pour ce compte.
Une demande qui est un simple "lecture" est traitée de la même manière qu'une demande d'écriture sauf que si c'est un mauvais demande (si le compteur n'a pas de match), une lecture est plus susceptibles d'être en mesure d'être traitée de manière sécuritaire.
Toutes les demandes qui fournissent une autre valeur de compteur que prévu ("mauvais" demandes), toujours suite à la mise à jour du compteur au serveur et toujours le client de la réponse de l'obtention de la bonne prochaine devrait contre-valeur; toutefois, ces demandes doivent être ignorés dans la mesure où ils demandent de mettre à jour le compte. Des demandes douteuses pourrait même aboutir à des mesures plus rigoureuses (comme l'enregistrement de l'utilisateur).
Client javascript, mise à jour de la valeur du compteur sur chaque serveur de la réponse à ce que le serveur renvoie donc que cette mise à jour de la valeur du compteur est envoyé sur n'importe quel prochain appel (par exemple, sur le rythme cardiaque ou de parler à un serveur). Chaque demande de client obtiendrez toujours une pièce de théâtre de la prochaine valeur envoyée en arrière, mais c'est le client qui utilise ce premier sera traitée comme ok par le serveur.
Les autres clients (c'est à dire, toute demande du client qui ne fournit pas les attendus valeur du compteur) s'être donné un état de sécurité, par exemple, l'état actuel que par la base de données tout en ignorant les écrire/demandes de mise à jour. Le serveur peut traiter le "mauvais" client appelle dans d'autres plus drastique des moyens, par exemple, par l'enregistrement de l'utilisateur ou que ce soit, mais surtout assurez-vous juste à l'honneur, au plus, le mauvais client est sûr de demandes de lecture, ne pas mettre à jour le compte d'une quelconque manière.
Le rythme cardiaque est nécessaire que si vous souhaitez un nettoyage de vue dans l'ordre court. Pour faire la lumière sur le serveur, vous pouvez avoir le pouls être un simple ping (envoi de la valeur de compteur de long). S'il est reconnu comme le bon client, vous pouvez être fait pour que le rythme cardiaque. Si vous étiez un mauvais client toutefois, le serveur peut renvoyer dire du bien fraîche info qui peut être utilisé par javascript du rythme cardiaque code pour mettre à jour l'interface graphique. Le rythme cardiaque peut être à un autre serveur php de la page ou principal, mais si différents, assurez-vous que la page est vue cohérente de serveur enregistré variable compteur (par exemple, l'utilisation d'une base de données).
Une autre fonctionnalité que vous pouvez implémenter pour un compte est "actif/inactif. Le client serait inactive si la position de la souris n'a pas changé depuis un certain nombre de secondes ou de minutes (et pas de touches tapées ou autre saisie de l'utilisateur au cours de l'époque). Le rythme cardiaque peut désactiver lui-même (clearInterval) lorsque le client est inactif. Sur chaque entrée de l'utilisateur de vérifier si le rythme cardiaque est arrêtée et si donc le redémarrer. Battement de coeur redémarrer aussi signifie que l'utilisateur est en train de changer d'inactif à actif. L'arrêt de la pulsation permettra de conserver client/serveur de ressources lorsque l'utilisateur navigue sur un autre onglet ou afk. En devenant de nouveau actif, vous pouvez faire des choses comme déconnecter l'utilisateur si ils ont été inactifs pendant une longue période de temps, etc... ou tout simplement ne rien faire de nouveau, sauf le redémarrage de battement de coeur. [Rappelez-vous, la réponse à un battement de cœur pourrait indiquer le rythme cardiaque demande était "mauvais".. qui pourrait éventuellement être un "drastique" la raison pour ouvrir une session utilisateur comme mentionné ci-dessus.]
Je sais que la réponse a été acceptée, mais ça n'a pas fonctionné dans mon cas. J'ai déjà eu des "no-cache" en-tête ajouté. Dans mon cas, c'était la solution qui a vraiment travaillé, parce que si vous ajoutez un code après la demande, il pourrait ne pas obtenir exécuté dans les temps pour le deuxième morceau de code à exécuter avec succès: