cernos 0 Опубликовано: 10 сентября 2007 Рассказать Опубликовано: 10 сентября 2007 Здравствуйте ув. администрация и посетители данного форума. Появилась необходимость сделать вызов javascript функции, написанной мной, после того как был обработан запрос ajax. Вставляя просто javascript в контент выдаваемый ajax'ом ничего не добился, скоипт вообще не читается. Попытался вставить функции, после ajax.sendAJAX(varsString); безуспешно, была попытка поковырятся в самом js скрипте ajax, после чего нарыл такое: this.onCompletion = function() {}; поидеи сюдаи надо вставлять функцию, которая будет вызываться после того выполнится весь ajax запрос, но увы..... после добавления, ajax отказывается работать и перегружает страницу. Что я хочу сделать: Хочу сделать плавный вывод графика рейтинга(голосования) на сайте, т.е. Пример голосования: Оцените работу движка Лучший из новостных - 1 (100%) Неплохой движок - 0 (0%) Устраивает ... но ... - 0 (0%) Встречал и получше - 0 (0%) Совсем не понравился - 0 (0%) Всего проголосовало: 1 как мы наем, график появляется сразу, я сделал иначе: График выстраивается постепенно, сначала Полоса: Лучший из новостных растет до 100%, вырастает сек. так за 2-3 Потом вырастают остальные, если они по 0%, то вырастатют до 1пикселя. Наблюдать такое интересно и хотелось бы чтобы это было встроено в ДЛЕ. При необходимости celsoft'у могу предоставить данный скрипт и показать его работу, но не в самом дле, а отдельным файлом. Помогите вставить его в дле, как заставить работать javascript после выполнения ajax и как определить что мы нажимаем именно голосование(рейтинг)? для того чтобы не запускать эту функцию при других запросах. Может кто возьмется?! Обращение к celsoft: Мой сайт zpublic.ru (это по поводу лицензии) Если Вас заинтересует, хотя бы немного, смогу в личку кинуть содержимое html файла, там где вы сможете это просмотреть, если у Вас получится вставить данный скрипт (он мал по своему содержанию), то буду оч. благодарен и думаю он найдет свое место в движке. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 10 сентября 2007 Рассказать Опубликовано: 10 сентября 2007 Сталкивался с подобной проблемой. Реализовал старым дедовским способом - ajax возвращает значение формы - ява скрипт его считывает и в зависимости от этого значения запускает нужную функцию Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 Автор можешь более подробно, можешь привести пример. оч надо Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 079 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 this.onCompletion = function() {}; поидеи сюдаи надо вставлять функцию, сюда писать ничего не нужно, нужно просто перед вызовом АJAX (ajax.sendAJAX) задать функцию которая должна выполнится после окончания работы, например ajax.onCompletion = myFunction; также AJAX в DLE умеет выполнять JavaScript который находится в возвращаемом с сервера текте, для этого нужно задать перед вызовом ajax.sendAJAX ajax.execute = true; Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 (изменено) Смотри, твоей javascript функции надо передать параметры для рисования индикатора голосования так? Вот мы их и передадим =) При нажатии на кнопку "голосовать" запускается функция sendVote(), которая выглядит примерно так: function sendVote() { ajaxVote(); setTimeout("waitcheck()",100); } ajaxVote() отправляет запрос на сервер с голосом, waitcheck() ожидает возврата результата. В саму форум добавляем скрытое поле с именем results и значением null. ajaxVote() нам возвращает данные голосования в виде массива, waitcheck() их забирает и передаёт твоей функции, которая и рисует график. Изменено 11 сентября 2007 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 079 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 lifestar, неправильное решение, а ответ от сервера будет дольше чем 500 милисекунд? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 (изменено) Ну так мы функцию waitcheck() заставим ожидать ответ =) Примерно так function waitcheck() { var code=document.getElementById("results").value; if (code=='null') setTimeout("waitcheck()",300); else funcGraph(code); } Примерно так Изменено 11 сентября 2007 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 079 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 lifestar, ну и зачем, когда я написал нормальное решение ajax.onCompletion = waitcheck; Все эта функция запустится сразу как только AJAX завершит работу. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 celsoft, согласен, но из-за нехватки информации приходилось изворачиваться. Про ajax.onCompletion = waitcheck; не знал) Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 11 сентября 2007 Рассказать Опубликовано: 11 сентября 2007 Автор Спасибо Всем, а особенно celsoft, теперь задача я думаю будет решена. Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 12 сентября 2007 Рассказать Опубликовано: 12 сентября 2007 Автор Увы, но задача так и не решена, нимагу никак всунуть, после тех действий которые вы описали, аякс работать не хочет. Страница перегружается. Celsoft отправляю Вам в личку, скрипт. Надеюсь поможете. Заранее спасибо. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 12 сентября 2007 Рассказать Опубликовано: 12 сентября 2007 Обычно страница перезагружается, когда имеет место javascript ошибка. Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 12 сентября 2007 Рассказать Опубликовано: 12 сентября 2007 Автор Что самое главное скрипт не имеет ошибки, в обычной статической странице работает, а только в движок всовываешь и тут те на. Может он не хочет работать потому что там в функции есть такое как settimeout - т.е. авторелоадинг функции, но без неё никак не обойтись, вообщем засада полная. LifeStar хочешь посомтри попробуй, могу в личку кинуть. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 12 сентября 2007 Рассказать Опубликовано: 12 сентября 2007 Кидай, я включил личку Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 14 сентября 2007 Рассказать Опубликовано: 14 сентября 2007 Автор Кидай, я включил личку Кинул, как успехи? Получилось хоть что нибудь????! Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 14 сентября 2007 Рассказать Опубликовано: 14 сентября 2007 cernos, получил, но пока не смотрел. Кстати ajax.onCompletion не всегда почему то срабатывает Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 079 Опубликовано: 14 сентября 2007 Рассказать Опубликовано: 14 сентября 2007 cernos, получил, но пока не смотрел. Кстати ajax.onCompletion не всегда почему то срабатывает в функциях которые использует DLE он срабатывает в 100% случаев Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 14 сентября 2007 Рассказать Опубликовано: 14 сентября 2007 Автор Срабатывает но всегда, согласен полностью с celsoft, ф уже этот аякс перерыд с А до Я. В общем проанализировав кучу всевозможных способов втуления срипта, firefox пишет, что функция которую нужно запустить не найдена. Если скрипт всовывать в vote.php который лежит в папке modules и добавлять рядом сос криптом вызова аякса, то функция срабатывает, но тогда она не распознает изображения получаемые в рейтинге. видимо он срабатывает раньше чем выводит аякс. В любом случае подключить не смог, как бы не тыкался и не смыкался. Обращаюсь к тебе celsoft , помоги разобраться, знаю что времени у тебя мало свободного, да и хочется отдохнуть, да и тебя многие просят о помощи, но тут совсем иная задача , иной случай, я уже даже ради принципа долблюсь, хрен с тем красивым рейтингом, но на будущее хотелось бы знать почему ?! В общем надеюсь на Вас celsoft Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 079 Опубликовано: 15 сентября 2007 Рассказать Опубликовано: 15 сентября 2007 А почему вы не поставите свой код просто в шаблон опроса, а самой функции AJAX в vote.php поставить ajax.execute = true; для примера рассмотрите функцию навигации по сайту при помощи AJAX в DLE, эта функция без проблем выполняет кучу JS в шаблонах, например редактор при добавлении комментариев. Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 15 сентября 2007 Рассказать Опубликовано: 15 сентября 2007 Автор Спасибо за подсказку, попробую. Цитата Ссылка на сообщение Поделиться на других сайтах
Гость Опубликовано: 15 сентября 2007 Рассказать Опубликовано: 15 сентября 2007 <#thank#> Цитата Ссылка на сообщение Поделиться на других сайтах
cernos 0 Опубликовано: 15 сентября 2007 Рассказать Опубликовано: 15 сентября 2007 Автор Тема закрыта, все получилось! Спасибо Вам celsoft Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.