Не удается удалить файл XML - PullRequest
1 голос
/ 12 ноября 2010

Справочная информация:

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

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

У меня следующая странная проблема:

Если я удаляю файл XML через FileZilla или пытаюсь перезаписать файл XML, загружая копию с моего локального компьютера, записи не меняются вообще, когда я смотрю на свою страницу. Фактически, если перезаписать 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('');
    }
}

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Это проблема с кешированием.Чтобы предотвратить кэширование ваших вызовов Ajax, добавьте время к вашему вызову Ajax:

$.post('myphp.php?' + new Date().getTime(), { my : dataString }, myFunction, "text");
0 голосов
/ 12 ноября 2010

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

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