2009-05-15 9 views
0

Je rends une image personnalisée basée sur des valeurs par défaut et des paramètres dans POST avec un script php personnalisé et la bibliothèque GD. J'essaie de créer un formulaire personnalisé pour permettre aux utilisateurs de sélectionner ces paramètres, puis envoyer une requête AJAX pour rendre l'image et l'envoyer et charger un aperçu dans la page.La charge AJAX d'un PNG rendu ne fonctionne pas

Le problème est que le premier aperçu fonctionne, mais après je ne peux plus charger d'autres aperçus. Je continue à voir la même image dans la fenêtre de prévisualisation. Cependant, je suis en train d'écrire l'image sur le disque et cela est en train d'être mis à jour, donc j'imagine que c'est un cache d'apache ou de navigateur. Voici un code:

requête AJAX est comme

preview = new Image; 
preview.src = url; 
$(preview).load(preview.src, imagedata, function() {            
    $('#gaga-preview-space').html(this);                
}); 

Où imageData est un tableau avec bgcolor, etc. Je suis également générer un horodatage pour chaque demande, dans l'espoir qu'il arrêterait apache de la cachine réponse. Cela a fonctionné dans d'autres cas, mais pas celui-ci.

Le script de génération de php ressemble:

// Save file 
$file = "/var/www/tribegaga/sites/all/files/gaga_customization/test.png"; 
$result = imagepng($image, $file); 

// Spit out file 
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: no-cache"); 
header("Content-Type: image/png"); 
imagepng($image); 

imagedestroy($image); 

Vous verrez j'envoyer des en-têtes, mais ce ne sont pas la question non plus.

Peut-être que je suis sur le mauvais chemin en pensant que c'est la mise en cache. Mais comme je l'ai mentionné, le .png généré fonctionne bien.

Mise à jour: Ok, le problème était que le navigateur ne POST pas pour obtenir une image, il obtient, maintenant mon script envoie une chaîne GET et tout fonctionne à merveille. Mais je préférerais ne pas avoir une image src = http://site/script.php?string=params&test=foo etc.

Si vous avez tous des suggestions je l'apprécierais.

Merci!

Répondre

2

Vous pouvez également définir un en-tête Expires (à une date dans le passé) et Last-Modified (à la date/heure actuelle).

Questions connexes