Автоматическое обновление страницы

alexvp

Новичок
Хочу реализовать следующий алгоритм работы.
На странице выводится таблица с перечнем файлов. Для каждого файла в таблице указано число скачиваний. Посетитель страницы нажимает на название файла (это ссылка) и по ссылке вызывает на сервере скрипт, который передает файл на компьютер пользователя. Эта часть работает отлично. Проблема возникает в том, что для обновления числа скачиваний надо обновить страницу вручную.
Как лучше сделать, чтобы страница после скачивания (можно не дожидаться конца загрузки) обновлялась автоматически?
 

alexvp

Новичок
Пробовал. Столкнулся с тем, что загружаемый файл пытается грузиться через ответ ajax

У меня сейчас работает через принудительный reload по таймеру, устанавливаемому через javascript
Только мне кажется такое решение каким-то кривым...
 

WMix

герр M:)ller
Партнер клуба
тут такое дело, проблема в том, что вернуть может сервер или аттачмент или текст...
отсюда красивое решение не обновлять вообще а на клик кинуть 2 ajax запроса поочереди...
 

radioheaded

PHP нуб
Посетитель страницы нажимает на название файла (это ссылка) и по ссылке вызывает на сервере скрипт, который передает файл на компьютер пользователя.
Почему нельзя обновить счетчик этим же скриптом перед тем, как отдать файл пользователю?
 

alexvp

Новичок
Счетчик логичнее обновлять ПОСЛЕ начала загрузки.

Можно поподробнее про два запроса ajax по очереди? Не совсем понял как это можно реализовать?
 

WMix

герр M:)ller
Партнер клуба
а как ты реализовал ?
Пробовал. Столкнулся с тем, что загружаемый файл пытается грузиться через ответ ajax
Почему нельзя обновить счетчик этим же скриптом перед тем, как отдать файл пользователю?
нужно по идеи, и вероятнее всего оно так и сделано -- "Проблема возникает в том, что для обновления числа скачиваний надо обновить страницу вручную." но изменение колличества пользователь так и не увидит... ему вернется файл!
Счетчик логичнее обновлять ПОСЛЕ начала загрузки.
как кликнули так и обновили!... ты все равно не узнаешь сгрузил пользователь файл или нет
 

radioheaded

PHP нуб
Счетчик логичнее обновлять ПОСЛЕ начала загрузки.
Чем отличается наносекунда до начала загрузки от наносекунды после? Ошибка в подсчете может случиться только если при попытке отдать файл происходит какая-то ошибка. Но тут можно просто откатывать инкремент либо руками, либо делать инкремент в транзакции и откатывать ее при ошибке. Вы зачем-то усложняете очень простую вещь.
 

alexvp

Новичок
Я должен знать, что процесс загрузки начался и после этого обновить счетчик. Да, я не узнаю, успешно или нет загрузился файл.
 

alexvp

Новичок
Если пытаться обновить счетчик ДО начала, тоже грабли. Я кликаю по ссылке, вызывается скрипт, который меня возвращает снова на исходную страницу. И в какой момент начать загрузку? Уже заголовки ушли, поэтому в скрипте я не смогу еще раз сформировать заголовки для загрузки файла. Передавать исполнение другому скрипту - получается распараллеливать процесс, это тоже неверно для php.
 

WMix

герр M:)ller
Партнер клуба
alexvp
а как ты собираешься узнать, что загрузка файла началась?
 

WMix

герр M:)ller
Партнер клуба
Если пытаться обновить счетчик ДО начала, тоже грабли. Я кликаю по ссылке, вызывается скрипт, который меня возвращает снова на исходную страницу
не путай сервер и клиент, счетчик нужно обновить на сервере... а после запросить его клиентом...
radioheaded кажись пытается это тебе обьяснить....
Если пытаться обновить счетчик ДО начала, тоже грабли. Я кликаю по ссылке, вызывается скрипт, который меня возвращает снова на исходную страницу. И в какой момент начать загрузку? Уже заголовки ушли, поэтому в скрипте я не смогу еще раз сформировать заголовки для загрузки файла. Передавать исполнение другому скрипту - получается распараллеливать процесс, это тоже неверно для php.
по старинке делалось именно так, мета тэгом .. но это грабли "F5"...
PHP:
$('link').click( function(){
  $.ajax({
    'url' : "file.php", 
    'onComplete': function(){ 
      $.ajax({
        'url': "counter.php"
      });
     }
    });
});
 

alexvp

Новичок
Вылезла новая проблема - загрузка файла на комп пользователя через ajax. Погуглил - тоже все варианты через танцы с бубнами
Похоже, вернусь к варианту с обновлением страницы через таймер...
 

alexvp

Новичок
но есть просвет на горизонте, загрузка файла делается через iframe
Смотрел на iframe, но не мой случай. Я в самом начале не указал, что сайт ориентирован на браузеры смартфонов андроида. А насколько я в курсе, iframe коряво в этих браузерах работает. да что там iframe, даже откат по history криво работает :)
Оставлю как есть - взведение таймера перезагрузки на несколько секунд и ссылка на скрипт скачивания файла. Экспериментируя установил, что таймер должен быть порядка 6-8 сек.
 

WMix

герр M:)ller
Партнер клуба
не торопись... если у тебя скрипт после нажатия на кнопку не обрывается, то вместо перезагрузки кто не дает тебе просто обновить счетчик ajaxом.. а чтоб быть уверенным делай загрузку в новом окне
PHP:
window.open('file.php','_blank');
setTimer(... function(){$.ajax(...);})
 

isqad

isqad88
Отдавайте файл через php (headers), в этой же функции (методе) обновляйте счетчик скачиваний (в бд), а на странице, чтобы страницу не перезагружать, на ссылку к файлу навешайте обработчик события клика в котором прибавляйте единицу к числу скачиваний(в коде html таблицы)
 

alexvp

Новичок
Отдавайте файл через php (headers), в этой же функции (методе) обновляйте счетчик скачиваний (в бд), а на странице, чтобы страницу не перезагружать, на ссылку к файлу навешайте обработчик события клика в котором прибавляйте единицу к числу скачиваний(в коде html таблицы)
Браво! Отличное решение, которое прямо было перед глазами! Спасибо большое!
 
Сверху