Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странное поведение... (https://javascript.ru/forum/misc/16144-strannoe-povedenie.html)

popov654 28.03.2011 08:58

Странное поведение...
 
Вложений: 1
Здравствуйте, друзья)
Я на днях написал небольшой парсер статистики для Shoutcast. Парсер написан на PHP, но также активно используется JavaScript. И хотя нерабочий код на JavaScript я бы мог реализовать на PHP, мне всё же хочется "добить" эту проблему из принципа, чтобы у меня не осталось вопросов, которые я так и не понял.

Код на PHP огромен, да и в данном случае не очень нужен (если потребуется, я могу выложить некоторые части, которые касаются проблемы), код на JavaScript чуть меньше, но тоже не слабый, поэтому я не буду тут всё это постить, а просто выложу ссылку. Кому интересно и у кого есть время - откликнитесь, пожалуйста :-)

Ссылка вот: http://popov654.pp.ru/parser
Для тестирования понадобится лог-файл, я его прикрепляю сюда. К сожалению, загрузка файла с первого раза может не получиться, если браузер "зависнет" в ожидании ответа - повторите 1-2 раза, на третий точно должно сработать.

JavaScript код всех трёх фреймов просмотреть можно любым браузером, это совершенно стандартная процедура)

Теперь в чём собственно проблема. Во-первых, никак не удалось путём довольно хитрых манипуляций заставить его "не сбрасывать" поле с именем файла после первой загрузки файла через форму. При этом при последующих переходах значение поля уже сохраняется, но при самом первом - нет. Хотя отладочные алерты свидетельствуют о том, что мои методы сохранения и восстановления работают. Этот момент может быть неприятен для пользователя скрипта, в частности, для меня. Ведь по сути выбирать файл в диалоге приходится дважды!

Насчёт скорости - я возможно сделаю так, чтобы 5-мегабайтный файл не заливался на сервер при каждой смее страницы в трекере, а работа происходила с уже загруженным файлом, а стирался чтобы он с сервера при выгрузке веб-страницы/закрытии браузера с помощью вызова другого php-сценария через JavaScript. Тогда и необходимость "помнить" это поле пропаёт :-)

А второй момент ещё того хуже: глючит трекер. А именно, смена групп по 10. При такой смене происходит перезагрузка данных наверху, но сам трекер в нижнем фрейме почему-то остаётся прежним. А при попытке обновить его содержимое средствами браузера вообще происходит совершенно невероятное. Попробуйте) И как это?!.. :blink: Там ведь стоит цикл на 10 итераций со счётчиком!

Вот... Собственно в этом и мой вопрос)

popov654 28.03.2011 17:46

О, часть проблемы решена. В строке for (i = group * 10 + 1; i <= (group + 1) * 10; i++) { ...
group была строкой, и group + 1 вместо 2 получалось 11 :)

Хорошо. А почему она не перезагружает нижний фрейм? И да, восстановление поля с файлом тоже не работает, хотя стоит в обработчике onload

popov654 28.03.2011 18:43

Вернее, не совсем правильно сказал. Обработчик выполняется, URL нижнего фрейма изменяется (новые параметры передаются). Но он с какой-то стати оставляет старые данные, записанные сценарием с помощью document.write(), а новые - не пишет, хотя по идее сценарий должен бы исполниться ещё раз с новыми переменными.

Хотя... Я пожалуй этот код тоже попробу в onload поставить, может, грабли в этом :)

popov654 28.03.2011 20:14

Эх... Всё переписал через onload, исправил везде document.write() на изменение innerHTML нужного контейнера, и всё коту под хвост :-/
:( Проблема осталась, без ручной перезагрузки ничего не происходит(

popov654 28.03.2011 20:26

Короче, у этой ерунды ноги похоже вот откуда растут. При смене URL (причём через location.href, location.replace() или src фрейма - не имеет значения) браузер, кажется, не производит перезагрузку страницы при смене параметров, идущих в качестве довеска к адресу и поэтому мой onload вылетает в трубу. Сделать перезагрузку средствами JavaScript (location.reload()) я пробовал, но если сделать это в скрипте с трекером в onload, будет бесконечное зацикливание, если сделать в скрипте-инициаторе (верхнем фрейме) - тогда почему-то вообще возвращается прежний адрес со старыми параметрами (хотя не очень понятно, почему).

Похоже, у меня есть два варианта: либо, если существует какой-нибудь способ прикрепить обработчик-слушатель на событие смены хвоста URL (query), воспользоваться им, либо сделать php-скрипт, на который будет перебрасывать нижний фрейм, а уж тот в свою очередь отправит браузер куда надо... :(

popov654 28.03.2011 21:31

Всё, с этим разобрался :)
Сделал сначала редирект на пустую страницу, потом задержку в полсекунды и второй редирект куда надо) Помогло

FINoM 29.03.2011 05:14

Гуд.


Часовой пояс GMT +3, время: 00:31.