2010-11-12 5 views
1

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(''); 
    } 
} 
+1

Avez-vous navigateur clair cache ou peut-être que la mise en cache côté serveur est activée? –

+0

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

Répondre

1

Ceci est un problème de mise en cache. Pour éviter que vos appels Ajax d'être mis en cache ajouter le temps à votre appel Ajax:

$.post('myphp.php?' + new Date().getTime(), { my : dataString }, myFunction, "text"); 
+0

Ou laisser PHP en dehors de lui entièrement "myxmlfile.xml?" + new Date(). getTime() ' – Phil

+0

Ouais, vu que déjà ... mieux vaut juste utiliser js. Merci. – Mischa

+0

Petit problème, ce n'est pas comme ça que je fais mes appels AJAX. J'utilise $ .post ('myphp.php', {my: dataString}, myFunction, "text"); – Didaxis

0

Vous pouvez également ajouter dans votre script PHP avant d'envoyer le fichier XML:

header('Pragma: no-cache'); 
header('Cache: no-cache; must-revalidate;'); 
+0

Je n'envoie pas le fichier XML, le fichier XML est manipulé via PHP et JSON est renvoyé. Mais j'ai essayé votre suggestion en ajoutant les en-têtes, et celui ci-dessus en ajoutant la date, mais en vain ... – Didaxis

Questions connexes