Как загрузить обновленную версию файла сервера в IE (PHP)?
Internet Explorer вызывает у меня серьезную головную боль...
Что я хочу сделать, так это создать кнопку, при нажатии на которую файл .csv загружается на клиент. Этот файл .csv содержит информацию, хранящуюся в одной из таблиц результатов, которые я создаю на странице.
Перед созданием этой кнопки я вызываю внутреннюю функцию для создания csv-файла на основе отображаемой в данный момент таблицы. Я создаю этот файл .csv на сервере. Я включу эту функцию здесь просто на всякий случай, но я не думаю, что это поможет. Как я уже сказал, я создаю этот файл, прежде чем создавать кнопку.
/*
/ Creates a .csv file including all the data stored in $records
/ @table_headers - array storing the table headers corresponding to $records
/ @records - two dimensional array storing the records that will be written into the .csv file
/ @filename - string storing the name of the .csv file created by this from
*/
public function export_table_csv( $table_headers, $records, $filename )
{
// Open the $filename and store the handle to it in $csv_file
$csv_file = fopen( "temp/" . $filename, "w" );
// Write the $table_headers into $csv_file as a first row
fputcsv( $csv_file, $table_headers );
// Iterate through $records and write each record as one line separated with commas to $csv_file
foreach ( $records as $row )
fputcsv( $csv_file, $row );
// Close $csv_file
fclose( $csv_file );
} // end export_table_csv()
У меня это работает нормально. У меня есть кнопка "Экспорт", и я использую ее событие onClick(), где я использую однострочный текст:
window.open( 'temp/' . $export_filename );
Теперь он работает так, как задумано, во всех браузерах, кроме IE. Файл по-прежнему загружается, но затем, когда я выполняю некоторую фильтрацию в таблице, которую я отображаю на странице (страница перезагружается всякий раз, когда применяются новые фильтры), а затем снова нажмите кнопку "Экспорт", она каким-то образом загружает старую версию файла .csv с примененными старыми фильтрами, а не текущими, хотя этот файл .csv перезаписывается каждый раз, когда применяются новые фильтры, и страница перезагружается.
Это как если бы файл .csv, который я экспортирую, хранился в кэше IE или что-то в этом роде... Это действительно раздражает, так как экспорт отлично работает во всех других браузерах... Chrome и FF всегда загружают последнюю версию файла с сервера, т. е. обновляет файл случайным образом, иногда только после того, как я несколько раз отправляю страницу с разными фильтрами...
Я не включил слишком много строк своего кода, так как я скорее думаю, что мне просто не хватает какого-то мета-тега или чего-то еще в моем коде, а не логической ошибки в строках, которые я уже написал.
Я действительно смущен этим и, мягко говоря, раздражен... Мне действительно начинает не нравиться IE сейчас...
Я ценю любые предложения по этому вопросу.
1 answers
Вы можете использовать "разрушитель кэша", чтобы запретить IE кэшировать ресурс.
Если вы добавите параметр GET (со значением, которое меняется каждый раз при загрузке страницы) в URL-адрес, IE (или, скорее, любой браузер) подумает, что это другой файл для получения, поэтому сделайте что-то вроде этого:
window.open( 'temp/" . $export_filename . "?cachebuster=" . uniqid(true) . "' );
Если значение должно изменяться при каждом нажатии (не при загрузке страницы):
window.open( 'temp/" . $export_filename . "?cachebuster="' + Math.random() );