Как загрузить обновленную версию файла сервера в 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 сейчас...

Я ценю любые предложения по этому вопросу.

Author: Tom Wasniewski, 2012-06-14

1 answers

Вы можете использовать "разрушитель кэша", чтобы запретить IE кэшировать ресурс.

Если вы добавите параметр GET (со значением, которое меняется каждый раз при загрузке страницы) в URL-адрес, IE (или, скорее, любой браузер) подумает, что это другой файл для получения, поэтому сделайте что-то вроде этого:

window.open( 'temp/" . $export_filename . "?cachebuster=" . uniqid(true) . "' );

Если значение должно изменяться при каждом нажатии (не при загрузке страницы):

window.open( 'temp/" . $export_filename . "?cachebuster="' + Math.random() );
 3
Author: RikkusRukkus, 2012-06-14 09:43:04