jQuery | Cacheproblem bei $.ajax
moses
- javascript
0 Matti Maekitalo0 suit
Liebe jQuery Experten,
ich entwickle gerade einen "Anmelde"-Wizard. Alles funktioniert im ersten Durchgang einwandfrei. Leider wird auf der letzten Seite des Anmeldevorgangs , in der alle Eingaben noch einmal ausgegeben werden, Änderungen bei den Angaben nicht angezeigt. (Wenn ich im "Wizard" eine Seite zurückgehen und bspw. meine PLZ ändere). Rufe ich dagegen die Datei inc.usercheck.php separat auf, wird sofort die Änderung angezeigt.
in der Datei inc.usercheck.php werden die Formulareingaben in Session-Variablen gespeichert.
Natürlich habe ich schon im Netz nachgeschaut woher das Problem stammen kann. Der allgemeine Tenor war, an den Request einen Timestemp ranzuhängen. Ich bin da noch ein bisschen weitergegangen (crypt ist ein jQuery-Plugin):
jQuery.ajax({
url: "inc.usercheck.php?action=showvalues&x=" + jQuery().crypt( { method: 'md5', source: String((new Date()).getTime()).replace(/\D/gi, '')}),
cache: false,
dataType: "html",
success: function(data) {
jQuery("#uservalues").replaceWith(data);
}
});
Ein anderer Weg war die Manipulation des Headers der php-Datei.
Ich habe wie folgt den Header angepasst:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
session_cache_limiter ( 'nocache' );
Leider wird die Änderung im Anmelde-Wizard immer noch nicht angezeigt. Das Problem tritt sowohl im FF 3.6.13 als auch in Safari auf.
Kann mir hier jemand helfen?
Vielen Dank!
moses
Tach auch.
jQuery.ajax({
url: "inc.usercheck.php?action=showvalues&x=" + jQuery().crypt( { method: 'md5', source: String((new Date()).getTime()).replace(/\D/gi, '')}),
cache: false,
dataType: "html",
success: function(data) {
jQuery("#uservalues").replaceWith(data);
}
});
Zunächst: ich würde dir empfehlen, die Parameter, welche du anhängen willst, in einem eigenen Objekt zu speichern und ajax() dieses zu übergeben. Dann musst du dich nicht um escaping&Co kümmern, sondern jQuery macht das für dich.
Ich empfinde es auch als besser lesbar gegenüber der URL-Notation, aber das musst du selbst entscheiden.
Weiterhin hängt jQuery mit `{ "cache":false }`{:.language-javascript} automatisch einen Parameter mit dem Namen "\_" an, welches IMHO das machen sollte, was du mit dem Parameter "x" probierst. Du kannst es also weglassen.
Zum Problem: hast du mal nachgeschaut, was in der access-log des Servers steht? Kommt dort ein AJAX Request an? Wenn ja, mit welchen Parametern? Sind es (neben dem automatischen "\_") diejenigen, welche du erwartest? Was ist der Return-Code?
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)
Zunächst: ich würde dir empfehlen, die Parameter, welche du anhängen willst, in einem eigenen Objekt zu speichern und ajax() dieses zu übergeben. Dann musst du dich nicht um escaping&Co kümmern, sondern jQuery macht das für dich.
Als string (data) ist das auch möglich.