2010-11-12 4 views
1

фона:Не удается удалить файл XML

Мои веб-страницы загружает данные из файла XML с помощью AJAX/Jquery и отображает их (отлично работает)

На этой странице также имеет форму, которая отправляет через AJAX/Jquery в PHP файл, который записывает в файл XML, а затем перезагружает записи XML с помощью AJAX/Jquery и отображает их (работает отлично)

у меня есть следующие нечетные проблемы:

Если я удалить файл XML с помощью FileZilla , или попробуйте перезаписать XML-файл, загрузив ac opy с моей локальной машины, записи не меняются вообще, когда я смотрю на свою страницу. На самом деле, если перезаписать XML-файл с новой копией, я увижу новую копию, если я перейду к ней в свою адресную строку, например: http://mysite.com/myxmlfile.xml, однако на странице, отображающей записи XML, старые записи (например, файл был никогда не перезаписываются/удаляются) все еще отображаются!

Confused!


Вот мой 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(); 

    ?> 

Вот мой файл 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

ли вы ясно браузера кеш или может быть включено кэширование на стороне сервера? –

+0

Да, я очистил кеш браузера. Насколько мне известно, кеш-сервер не работает, хотя это кажется правдоподобной причиной. – Didaxis

ответ

1

Это проблема кэширования. Для того, чтобы предотвратить ваши вызовы Ajax от кэширования добавить время к Ajax вызова:

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

Или оставить PHP из него полностью '' myxmlfile.xml? ' + new Date(). getTime() ' – Phil

+0

Да, заметил, что уже ... лучше просто использовать js. Благодарю. – Mischa

+0

Небольшая проблема, это не то, как я делаю звонки AJAX. Я использую $ .post ('myphp.php', {my: dataString}, myFunction, "text"); – Didaxis

0

Вы также можете добавить это в PHP скрипт перед отправкой файла XML:

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

Я фактически не отправляю XML-файл, файл XML обрабатывается через PHP, а JSON отправляется обратно. Но я пробовал ваше предложение, добавляя заголовки, и выше, добавляя дату, но безрезультатно ... – Didaxis