2010-07-22 6 views
1

Je développe une superposition simple pour prévisualiser l'image en taille réelle. J'utilise "cache: false" pour empêcher la mise en cache.jQuery ajax cache: false fonctionne uniquement dans firefox

Le code est simple:

$.ajax({ 
    url: urlFull, 
    cache: false, 
    success: function(html){ 
     // display image 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     // display error 
    } 
}); 

Le problème est - Lorsque le fichier d'image sera remplacé par un autre, le navigateur affichera toujours l'ancien, quel que soit « cache: false » option a été définie.

Ce problème apparaît sous Safari 5.0 (6533.16) et Chrome 5.0.375.99.

Dans Firefox 3.6.3 fonctionne comme prévu (pas de mise en cache)

Je ne peux pas contrôler la logique côté serveur, parce que je précharger un fichier régulier, sans faire appel à des actions de contrôleur dans les rails.

Y at-il une solution de contournement de ce problème? Peut-être, je peux intercepter la réponse avec le serveur Rails et modifier quelques en-têtes? ... Je développe sous localhost.

Merci.

Répondre

1

En tant que solution «sale», essayez d'ajouter un horodatage à vos paramètres URL GET.

+0

1 - Il Ce n'est pas une solution sale, c'est la seule façon que je connaisse qui fonctionnera sur tous les navigateurs. Maintenant, si vous êtes prêt à utiliser un 'POST' au lieu de' GET', cela empêchera également la mise en cache. –

+0

Je n'ai pas trouvé l'horodatage dans la documentation. Comment puis-je le définir? – AntonAL

+1

Ajoutez simplement un nouveau paramètre GET à votre URL: 'url + =" & avoidCache = "+ (new Date()). GetTime()' – spektom

0

J'ai essayé d'utiliser

data: { timestamp: new Date().getTime() }. 

Il ne fonctionne pas.

Dans le panneau de développeur de Safari je l'ai trouvé, que la chaîne de requête ressemble à ceci:

"http://path_to_the_image.png?_=1279789134612".

J'ai ajouté le "_" paramètre:

data: {_: new Date().getTime()} 

et a obtenu l'URL suivante:

"http://path_to_the_image.png?=1279789134612&=1279789245466".

Aussi, j'ai essayé d'utiliser "timestamp", "tstamp", "t"; réglage « 0 », « 9999999999999 » ... tout donne aucun résultat ...

Il semble, comme je ne peux pas contrôler l'horodatage, qui est interne à setted .ajax $ ...

Questions connexes