Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.03.2011, 08:58
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

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

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

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

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

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

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

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

Вот... Собственно в этом и мой вопрос)
Вложения:
Тип файла: zip sc_serv.zip (624.7 Кб, 3 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 28.03.2011, 17:46
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

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

Хорошо. А почему она не перезагружает нижний фрейм? И да, восстановление поля с файлом тоже не работает, хотя стоит в обработчике onload
Ответить с цитированием
  #3 (permalink)  
Старый 28.03.2011, 18:43
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

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

Хотя... Я пожалуй этот код тоже попробу в onload поставить, может, грабли в этом
Ответить с цитированием
  #4 (permalink)  
Старый 28.03.2011, 20:14
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

Эх... Всё переписал через onload, исправил везде document.write() на изменение innerHTML нужного контейнера, и всё коту под хвост
Проблема осталась, без ручной перезагрузки ничего не происходит(
Ответить с цитированием
  #5 (permalink)  
Старый 28.03.2011, 20:26
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

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

Похоже, у меня есть два варианта: либо, если существует какой-нибудь способ прикрепить обработчик-слушатель на событие смены хвоста URL (query), воспользоваться им, либо сделать php-скрипт, на который будет перебрасывать нижний фрейм, а уж тот в свою очередь отправит браузер куда надо...
Ответить с цитированием
  #6 (permalink)  
Старый 28.03.2011, 21:31
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

Всё, с этим разобрался
Сделал сначала редирект на пустую страницу, потом задержку в полсекунды и второй редирект куда надо) Помогло
Ответить с цитированием
  #7 (permalink)  
Старый 29.03.2011, 05:14
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Гуд.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение объекта в 2D Flirer Общие вопросы Javascript 5 26.03.2011 10:16
Странное поведение переменной mycoding Серверные языки и технологии 4 14.01.2011 19:18
Странное поведение jquery Ziki jQuery 3 02.12.2010 21:09
Странное поведение replace cooli0 Общие вопросы Javascript 4 25.01.2010 17:16
Странное поведение браузеров Dicot Общие вопросы Javascript 27 26.04.2009 20:04