Contexte:Impossible de supprimer le fichier XML
Mes page Web se charge des entrées d'un fichier XML via AJAX/jQuery et les affiche (fonctionne très bien)
La page a aussi une forme qui présente via AJAX/jQuery dans un fichier PHP qui écrit dans le fichier XML, recharge alors les entrées XML via AJAX/jQuery et les affiche (fonctionne très bien)
J'ai le problème bizarre suivant:
Si je supprime le fichier XML par le biais FileZilla ou essayez d'écraser le fichier XML en téléchargeant un ac opy de ma machine locale, les entrées ne changent pas du tout quand je regarde ma page. En fait, si remplacer le fichier XML avec une nouvelle copie, je vois la nouvelle copie si je navigue dans ma barre d'adresse comme: http://mysite.com/myxmlfile.xml, cependant, dans la page qui affiche les entrées XML, les anciennes entrées (comme le fichier était jamais écrasé/effacé) sont toujours affichés!
Confus!
Voici mon fichier PHP:
<?php
header('Pragma: no-cache');
header('Cache: no-cache; must-revalidate;');
function signGuestbook($entry){
$date = date("n.d.Y");
$name = $entry['name'];
$email = $entry['email'];
$comment = $entry['comment'];
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->load('guestbook.xml');
$root = $doc->firstChild;
$e = $doc->createElement('entry');
$dateNode = $doc->createElement('date', $date);
$nameNode = $doc->createElement('name', $name);
$emailNode = $doc->createElement('email', $email);
$commentNode = $doc->createElement('comments', $comment);
$e->appendChild($dateNode);
$e->appendChild($nameNode);
$e->appendChild($emailNode);
$e->appendChild($commentNode);
$root->appendChild($e);
$doc->formatOutput = true;
$doc->save('guestbook.xml');
}
function loadGuestbook(){
$gBook = new DOMDocument();
$gBook->load('guestbook.xml');
$entries = $gBook->getElementsByTagName('entry');
$entries_arr = array();
foreach($entries as $entry)
{
$date = $entry->getElementsByTagName('date')->item(0)->nodeValue;
$name = $entry->getElementsByTagName('name')->item(0)->nodeValue;
$email = $entry->getElementsByTagName('email')->item(0)->nodeValue;
$comment = $entry->getElementsByTagName('comments')->item(0)->nodeValue;
$entries_arr[] = array(
'date' => $date,
'name' => $name,
'email' => $email,
'comment' => $comment
);
}
return json_encode($entries_arr);
}
$entry = json_decode(stripcslashes($_POST['entry']), true);
if($entry != null){
signGuestbook($entry);
}
header("Content-type: text/plain");
echo loadGuestbook();
?>
Voici mon fichier JS:
$(document).ready(function(){
$.post('guestbook.php?' + new Date().getTime(), loadGuestbook, "text");
});
function loadGuestbook(gBook){
var gBookDiv = $('div#guestbook');
gBookDiv.empty();
var entries = JSON.parse(gBook);
$.each(entries, function(i, entry){
gBookDiv.prepend(
'<div class="entry">' +
'<span class="date">' + entries[i].date + '</span>' +
'<strong class="blue">Name:</strong><span class="name">' + entries[i].name+ '</span><br />' +
'<strong class="blue">Email:</strong><span class="email">' + entries[i].email + '</span><br />' +
'<strong class="blue">Comments:</strong><p>' + entries[i].comment + '</p>' +
'</div>'
);
});
}
function signGuestbook(){
var name = $('input#name').val();
var email = $('input#email').val();
var comment = $('textarea#comments').val();
if(name == null || name == '' || email == null || email == ''){
alert('You must provide a name and email.');
}
else{
var entry = {
"name" : name,
"email" : email,
"comment" : comment
};
var entryString = JSON.stringify(entry);
$.post('guestbook.php?' + new Date().getTime(), { entry : entryString }, loadGuestbook, "text");
$('input#name').val('');
$('input#email').val('');
$('textarea#comments').val('');
}
}
Avez-vous navigateur clair cache ou peut-être que la mise en cache côté serveur est activée? –
Oui J'ai effacé le cache de mon navigateur. Je n'ai pas de cache côté serveur activé pour autant que je sache, bien que cela semble être une cause plausible. – Didaxis