0 レビュー
1 回答
javascript-削除されたファイルはまだアクセス中です
csvファイルの古いインスタンスを削除し、新しいインスタンスをアップロードするphpスクリプトと、ファイルを読み取るためのjavascript関数があります。古いファイルを削除するためにphpを追加するまでは正常に機能していましたが、何らかの理由で、javascript関数は、変更された場合でも常に同じファイルをフェッチします。
data.csvファイルにアクセスして確認しました。これは新しいファイルですが、関数はまだ古いファイルをフェッチします。また、ファイルを手動で削除すると、削除されたとしても、関数は不思議なことにdata.csvファイルにアクセスします。
これはphpです:
<?php
if(file_exists('upload/data.csv'))
{
unlink('upload/data.csv'); // deletes file
}
$tmp_file_name = $_FILES['Filedata']['tmp_name'];
$ok = move_uploaded_file($tmp_file_name, 'upload/data.csv');
?>
これはJavaScriptです。注:変数「allText」は、data.csvが変更または削除された場合でも、常に古いCSVファイルの内容になります。
function LoadCSV(){
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "http://****.com/mailer/upload/data.csv", true);
txtFile.onreadystatechange = function() {
if (txtFile.readyState === 4) { // Makes sure the document is ready to parse.
if (txtFile.status === 200) { // Makes sure it's found the file.
allText = txtFile.responseText;
ProcessCSV(allText);
}
}
}
txtFile.send(null);
}
なぜこれが起こっているのか、それを修正する方法がわかりませんか?
わからない
0
レビュー
答え :
解決策:
おそらくブラウザのキャッシュです。 URLにランダムな値を使用して、ブラウザをだまして別のページであると思わせるのが好きです。
これを試してください:
function LoadCSV() {
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "http://****.com/mailer/upload/data.csv?nocache="+(Math.random()+'').replace('.',''), true);
txtFile.onreadystatechange = function () {
if (txtFile.readyState === 4) { // Makes sure the document is ready to parse.
if (txtFile.status === 200) { // Makes sure it's found the file.
allText = txtFile.responseText;
ProcessCSV(allText);
}
}
}
txtFile.send(null);
}
getパラメータnochacheは、サーバーやブラウザにとって何の意味もありませんが、ブラウザのキャッシュを完全に失うという犠牲を払って、毎回新しいリソースをフェッチするようにだまします。技術的には、同じ値を2回取得することは(非常にまれですが)可能であるため、完全に確実なものにしたい場合は、ミリ秒単位で時間を追加できます。
これにより、他のほとんどすべてのタイプのキャッシュもバイパスされることに注意してください。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。