Pregunta

Antecedentes:

Mi página web se carga entradas desde un archivo XML a través de AJAX / jQuery y los muestra (bien funciona)

La página también tiene una forma que presente a través de AJAX / jQuery a un archivo PHP que escribe en el archivo XML, a continuación, vuelve a cargar las entradas XML a través de AJAX / jQuery y pantallas ellos (funciona bien)

Tengo el siguiente problema extraño:

Si elimino el archivo XML a través FileZilla, o tratar de sobrescribir el archivo XML mediante la carga de una copia de mi máquina local, las entradas no cambian en absoluto cuando estoy buscando en mi página. De hecho, si sobrescribir el archivo XML con una nueva copia, veo la nueva copia si navego a ella en mi barra de direcciones como: http://mysite.com/myxmlfile.xml , sin embargo, en la página que muestra las entradas XML, las entradas antiguas (como el archivo no se sobrescribe / Suprimido) seguirán viéndose!

confundido!


Aquí está mi archivo 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();

    ?>

Aquí está mi archivo 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('');
    }
}
¿Fue útil?

Solución

Este es un problema de almacenamiento en caché. Para evitar que sus llamadas Ajax de ser cacheada añadir el tiempo de la llamada Ajax:

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

Otros consejos

También puede ser que desee agregar esto en su script PHP antes de enviar el archivo XML:

header('Pragma: no-cache');
header('Cache: no-cache; must-revalidate;');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top