2010-11-12 148 views
1

背景:從通過AJAX/jQuery的XML文件無法刪除XML文件

我的網頁加載項並顯示它們(正常工作)

頁也有通過AJAX/jQuery的提交表單到寫入XML文件中的PHP文件,然後通過AJAX/jQuery的重新加載XML條目並顯示它們(正常工作)

我有以下奇怪的問題:

如果我刪除通過FileZilla的XML文件,或嘗試通過上傳ac來覆蓋XML文件opy從我的本地機器上看,當我看着我的頁面時,條目根本不會改變。實際上,如果用新副本覆蓋XML文件,那麼如果我在地址欄中導航到新副本,則會看到新副本:http://mysite.com/myxmlfile.xml,但是,在顯示XML條目的頁面中,舊條目(如文件是從未被覆蓋/刪除)仍然顯示!

困惑!


這是我的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

你有沒有清晰的瀏覽器緩存或可能有一些服務器端緩存啓用? – 2010-11-12 05:55:09

+0

是的,我清除了我的瀏覽器緩存。據我所知,我沒有啓用服務器端緩存,儘管這似乎是一個合理的原因。 – Didaxis 2010-11-12 05:56:27

回答

1

這是一個緩存的問題。爲了防止您的Ajax調用被緩存添加時間到您的Ajax調用:

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

或者讓PHP完全離開它''myxmlfile.xml?' + new Date()。getTime()' – Phil 2010-11-12 06:04:04

+0

是的,發現已經...更好地使用js。謝謝。 – Mischa 2010-11-12 06:05:15

+0

輕微的問題,這不是我如何讓我的AJAX呼叫。我使用$ .post('myphp.php',{my:dataString},myFunction,「text」); – Didaxis 2010-11-12 06:07:12

0

您可能還需要在你的PHP腳本發送XML文件之前補充一點:

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

我實際上並沒有發送XML文件,XML文件是通過PHP進行處理的,並且JSON被髮回。但我已經試過你的建議添加標題,並在上​​面添加日期,但無濟於事...... – Didaxis 2010-11-12 06:14:18