Перейти к публикации

Запуск javascript функции после обработки запроса ajax'ом


Рекомендованные сообщения

Здравствуйте ув. администрация и посетители данного форума.

Появилась необходимость сделать вызов 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 файла, там где вы сможете это просмотреть, если у Вас получится вставить данный скрипт (он мал по своему содержанию), то буду оч. благодарен и думаю он найдет свое место в движке.

Ссылка на сообщение
Поделиться на других сайтах

Сталкивался с подобной проблемой.

Реализовал старым дедовским способом - ajax возвращает значение формы - ява скрипт его считывает и в зависимости от этого значения запускает нужную функцию

Ссылка на сообщение
Поделиться на других сайтах

  cernos писал:
this.onCompletion = function() {}; поидеи сюдаи надо вставлять функцию,

сюда писать ничего не нужно, нужно просто перед вызовом АJAX (ajax.sendAJAX) задать функцию которая должна выполнится после окончания работы, например

	ajax.onCompletion = myFunction;
также AJAX в DLE умеет выполнять JavaScript который находится в возвращаемом с сервера текте, для этого нужно задать перед вызовом ajax.sendAJAX
	ajax.execute = true;

Ссылка на сообщение
Поделиться на других сайтах

Смотри, твоей javascript функции надо передать параметры для рисования индикатора голосования так?

Вот мы их и передадим =)

При нажатии на кнопку "голосовать" запускается функция sendVote(), которая выглядит примерно так:

function sendVote()

{

ajaxVote();

setTimeout("waitcheck()",100);

}

ajaxVote() отправляет запрос на сервер с голосом, waitcheck() ожидает возврата результата.

В саму форум добавляем скрытое поле с именем results и значением null. ajaxVote() нам возвращает данные голосования в виде массива, waitcheck() их забирает и передаёт твоей функции, которая и рисует график.

Изменено пользователем lifestar
Ссылка на сообщение
Поделиться на других сайтах

lifestar,

неправильное решение, а ответ от сервера будет дольше чем 500 милисекунд?

Ссылка на сообщение
Поделиться на других сайтах

Ну так мы функцию waitcheck() заставим ожидать ответ =)

Примерно так

function waitcheck()

{

var code=document.getElementById("results").value;

if (code=='null')

setTimeout("waitcheck()",300);

else

funcGraph(code);

}

Примерно так

Изменено пользователем lifestar
Ссылка на сообщение
Поделиться на других сайтах

lifestar,

ну и зачем, когда я написал нормальное решение

ajax.onCompletion = waitcheck;

Все эта функция запустится сразу как только AJAX завершит работу.

Ссылка на сообщение
Поделиться на других сайтах

celsoft, согласен, но из-за нехватки информации приходилось изворачиваться.

Про ajax.onCompletion = waitcheck; не знал)

Ссылка на сообщение
Поделиться на других сайтах

Увы, но задача так и не решена, нимагу никак всунуть, после тех действий которые вы описали, аякс работать не хочет. Страница перегружается. :(

Celsoft отправляю Вам в личку, скрипт. Надеюсь поможете. Заранее спасибо. :mellow:

Ссылка на сообщение
Поделиться на других сайтах

Что самое главное скрипт не имеет ошибки, в обычной статической странице работает, а только в движок всовываешь и тут те на. :huh:

Может он не хочет работать потому что там в функции есть такое как settimeout - т.е. авторелоадинг функции, но без неё никак не обойтись, вообщем засада полная. LifeStar хочешь посомтри попробуй, могу в личку кинуть. :)

Ссылка на сообщение
Поделиться на других сайтах

cernos, получил, но пока не смотрел. Кстати ajax.onCompletion не всегда почему то срабатывает

Ссылка на сообщение
Поделиться на других сайтах

  lifestar писал:
cernos, получил, но пока не смотрел. Кстати ajax.onCompletion не всегда почему то срабатывает

в функциях которые использует DLE он срабатывает в 100% случаев :)

Ссылка на сообщение
Поделиться на других сайтах

Срабатывает но всегда, согласен полностью с celsoft, ф уже этот аякс перерыд с А до Я. :rolleyes:

В общем проанализировав кучу всевозможных способов втуления срипта, firefox пишет, что функция которую нужно запустить не найдена. Если скрипт всовывать в vote.php который лежит в папке modules и добавлять рядом сос криптом вызова аякса, то функция срабатывает, но тогда она не распознает изображения получаемые в рейтинге. видимо он срабатывает раньше чем выводит аякс. В любом случае подключить не смог, как бы не тыкался и не смыкался. :blink:

Обращаюсь к тебе celsoft , помоги разобраться, знаю что времени у тебя мало свободного, да и хочется отдохнуть, да и тебя многие просят о помощи, но тут совсем иная задача <_< , иной случай, я уже даже ради принципа долблюсь, хрен с тем красивым рейтингом, но на будущее хотелось бы знать почему :huh: ?! В общем надеюсь на Вас celsoft :)

Ссылка на сообщение
Поделиться на других сайтах

А почему вы не поставите свой код просто в шаблон опроса, а самой функции AJAX в vote.php поставить

	ajax.execute = true;

для примера рассмотрите функцию навигации по сайту при помощи AJAX в DLE, эта функция без проблем выполняет кучу JS в шаблонах, например редактор при добавлении комментариев.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...