XMLファイルを削除できません
-
08-10-2019 - |
質問
バックグラウンド:
私のWebページは、ajax/jqueryを介してXMLファイルからエントリをロードし、それらを表示します(正常に動作します)
また、このページには、ajax/jqueryを介してXMLファイルに書き込むPHPファイルに提出するフォームもあり、Ajax/jQueryを介してXMLエントリをリロードして表示します(正常に動作します)
私は次の奇妙な問題を抱えています:
filezillaを介してXMLファイルを削除するか、ローカルマシンからコピーをアップロードしてXMLファイルを上書きしようとする場合、ページを見ているときにエントリはまったく変更されません。実際、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('');
}
}
解決
これはキャッシュの問題です。 AJAX通話がキャッシュされないようにするには、AJAXコールに時間を追加します。
$.post('myphp.php?' + new Date().getTime(), { my : dataString }, myFunction, "text");
他のヒント
XMLファイルを送信する前に、これをPHPスクリプトに追加することもできます。
header('Pragma: no-cache');
header('Cache: no-cache; must-revalidate;');
所属していません StackOverflow