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

Запуск 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 возвращает значение формы - ява скрипт его считывает и в зависимости от этого значения запускает нужную функцию

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

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 не всегда почему то срабатывает

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

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 эмодзи.

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

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

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

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