|
|
|
| Хочется выводить через AJAX текст, меняющийся во времени (динамический текстовый баннер).
Его код в передающей странице:
<?php
$data = <<<TEXT
<script>
var Z = W = 2; //количество вариантов текстов
var S = 1; //задержка в секундах
onload = function myFunc ()
{
document.getElementById ('p' + Z).style.display = 'none'; Z = (Z == W) ? 1 : (Z + 1);
document.getElementById ('p' + Z).style.display = 'block'; setTimeout (myFunc, S * 1000);
}
</script>
<p style="margin-top: 0; margin-bottom: 0; display: none" id="p1">
<font size="4" face="Arial">Это <a href="http://softtime.ru/">первый</a> вариант</font></p>
<p style="margin-top: 0; margin-bottom: 0; display: none" id="p2">
<font color="#FF00FF" size="4" face="Arial">Второй <a href="http://softtime.ru/"> вариант</a> ссылки</font></p>
TEXT;
echo $data = iconv('cp1251', 'utf-8', $data);
|
А в принимающей странице:
<?php
echo <<<TEXT
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
// в переменной data находится ответ от скрипта
$('#content').html(data);
});
</script>
TEXT;
|
Ничего не выводится. | |
|
|
|
|
|
|
|
для: Владимир55
(12.11.2009 в 19:09)
| | И не будет работать, и не должен. Откуда же знать браузеру, что это скрипт? Для него это текст не более. Чтобы стал скриптом, нужно пропустить его через eval, либо использовать:
jQuery.getScript( url, [callback] ). | |
|
|
|
|
|
|
|
для: sim5
(12.11.2009 в 19:29)
| | Да, понятно, для браузера это текст. Хотя ни одного знака этого текста он не воспроизвел...
А как сюда вставить jQuery.getScript( url, [callback] )? | |
|
|
|
|
|
|
|
для: Владимир55
(12.11.2009 в 20:16)
| | $.getScript("url/name.js"); | |
|
|
|
|
|
|
|
для: sim5
(12.11.2009 в 21:10)
| | Это мне не удалось. Можете написать поподробнее? | |
|
|
|
|
|
|
|
для: Владимир55
(12.11.2009 в 22:31)
| | Ну если вы сразу не исполняете его, потому и не удалось. Вам ужно последующее обращение к функциям загружаемого скрипта? Ну может тогда лучше загрузить обычным запросом, и полученный скрипт добавить к документу, ну а затем уже использовать:
success: $(document.body).append(eval'('+data+');');
где data, возвращаемый с сервера скрипт. Код скрипта должен быть заключен в теги <script></script>, и все это обработать перед отправкой на сервер:
str_replace(array("\r", "\n", "<", ">", "&"),array('\r', '\n', '\x3c', '\x3e', '\x26'),addslashes($var))
и обрамить кавычками. $var - сам скрипт. | |
|
|
|
|
|
|
|
для: sim5
(12.11.2009 в 22:53)
| | "Ну может тогда лучше загрузить обычным запросом"
Я хочу загрузить его в общем блоке неиндексируемой информации, подгружаемой через Аякс.
Может, тогда лучше обратиться к eval? Мне уже доводилось использовать эту фнукцию рнр, но как из скрипта
<?php
echo <<<TEXT
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
// в переменной data находится ответ от скрипта
$('#content').html(data);
});
</script>
TEXT;
| переписать информацию в переменную рнр, которая далее будет аргументом eval? | |
|
|
|
|
|
|
|
для: Владимир55
(13.11.2009 в 00:09)
| | Ну если вы как строку передаете, то конечно eval. Но обязательно пропустить строку через функции, о которых сказано выше. И скрипт лучше держать не в элементе документа, типа '#content', а в самом документе. Если же это просто набор данных для встраивания в определенное место страницы, то лучше обработать данные на сервере, и передать результат работы как массив (массив объектов), который уже вывести подключаемым обычным способом скриптом, в необходимый элемент. | |
|
|
|
|
|
|
|
для: sim5
(13.11.2009 в 00:21)
| | К сожалению, моей квалификации пока что не хватает для того, чтобы правильно интерпретировать и самостоятельно воплотить Ваш совет.
На данном этапе для меня единственную ценность представляют советы, приводящие конкретный работоспособный фрагмент кодов, из которых как из кирпичиков я попытаюсь построить свой скрипт.
Я был бы очень благодарен, если бы то-то знающий написал о том, как в скрипт
<?php
echo <<<TEXT
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
// в переменной data находится ответ от скрипта
$('#content').html(data);
});
</script>
TEXT;
| встроить что-то, что позволило бы воспоизвети скрипт, переданный со страницы '3.php' | |
|
|
|
|
|
|
|
для: Владимир55
(13.11.2009 в 14:55)
| | У вас сам JS сценарий, мягко выражаясь не логичный. Давайте так - какая задача преследуется при загрузке некоего JS-сценария с сервера? | |
|
|
|
|
|
|
|
для: sim5
(13.11.2009 в 15:12)
| | В самом первом сообщении 12.11.2009 в 19:09 имеется скрипт, который воводит два сообщения, причем вывод происходит таким образом, что одно сообщение периодически сменяется другим.
Мне нужно этот скрипт протащить на страницу через Аякс. | |
|
|
|
|
|
|
|
для: Владимир55
(13.11.2009 в 15:18)
| | А что делает сам JS-сценарий в этом примере? Я там ничего не понял.
А чтобы вывести переиодически N-сообщений, например, постоянной ротацией, то нужно действовать не так. | |
|
|
|
|
|
|
|
для: sim5
(13.11.2009 в 15:21)
| | Это код для периодической ротации, который мне дали на этом форуме. Может, есть вариант лучше, но я таковым не распологаю.
А приведенный работает вот так: http://vova.1gb.ru/222.htm | |
|
|
|
|
|
|
|
для: Владимир55
(13.11.2009 в 15:43)
| | Ну тогда нужно начать с того, что передавать с сервера сообщения обрамленные тегами параграфа, да еще установленными стилями, при которых один видим, другой нет, в купе еще и скрипт управления - это излишне и не оправдано.
Ваш основной JS-сценарий подключаемый к странице, уже должен иметь функцию, которая будет выводить сообщения. В $(document).ready устанавливаете таймер к обращению этой функции. Не надо ее грузить с сервера.
На мой взгляд время периода можно установить однократно, жестко его прописав, но если это так принципиально, можно получать это время и с сервера. Сам же запрос вообще может не содержать никаких параметров.
Получая ответ сервера, вы обрамляете его содержимое необходимыми тегами, и, если вам не понятно как добавлять DOM объекты в jQuery, то вставляете его в уже имеющийся HTML-элемент на странице, который и будет отображать эти ответы. Вы можете даже загружать уже в этот элемент первое из выводимых в него сообщений (стиль display: none не надо применять к нему) при выдаче страницы, а таймер + запрос сменят его на следующий и т.д..
Функция, которая будет делать запросы к серверу, может сразу же управлять и эффектом этого окна, используя эффекты jQuery, например, fade, slide и т.п.. Например, вы сперва плавно гасите окно сообщений:
$('#box').fadeOut(500);
Затем загружаете полученное (и обработанное) содержимое ответа в этот элемент, и показываете его:
$('#box').fadeIn(500);
Я уже говорил, что совсем не обязательно передавать параметры серверу в запросе, если выдачей ответа занимается отдельный скрипт на сервере, а не обрабатыващий множество запросов. И что отдавать колиенту, тоже решать на сервере. Сколько всего сообщений будет показываться у клиента должен определять сервер, в конфигурации, корторую вы устанавливаете через админ панель. Это число будет служить параметром для LIMIT в SQL запросе. Этот запрос вы можете закешировать, а по счетчику установленному в сессии, уже можете выбирать N-ую запись из этого кеша и отдавать ее клиенту. То есть, передавать некие параметры JS-сценарию клиента, для управления этим, нет никакой необходимости.
В этой теме есть прикрепление описания API jQuery. Там есть примеры всех методов ее, полезно будет ознакомиться, опробовать их работу для понимания, и использовать. | |
|
|
|