Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Можно ли передать скрипт через AJAX ?
 
 автор: Владимир55   (12.11.2009 в 19:09)   письмо автору
 
 

Хочется выводить через 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;


Ничего не выводится.

  Ответить  
 
 автор: sim5   (12.11.2009 в 19:29)   письмо автору
 
   для: Владимир55   (12.11.2009 в 19:09)
 

И не будет работать, и не должен. Откуда же знать браузеру, что это скрипт? Для него это текст не более. Чтобы стал скриптом, нужно пропустить его через eval, либо использовать:
jQuery.getScript( url, [callback] ).

  Ответить  
 
 автор: Владимир55   (12.11.2009 в 20:16)   письмо автору
 
   для: sim5   (12.11.2009 в 19:29)
 

Да, понятно, для браузера это текст. Хотя ни одного знака этого текста он не воспроизвел...

А как сюда вставить jQuery.getScript( url, [callback] )?

  Ответить  
 
 автор: sim5   (12.11.2009 в 21:10)   письмо автору
 
   для: Владимир55   (12.11.2009 в 20:16)
 

$.getScript("url/name.js");

  Ответить  
 
 автор: Владимир55   (12.11.2009 в 22:31)   письмо автору
 
   для: sim5   (12.11.2009 в 21:10)
 

Это мне не удалось. Можете написать поподробнее?

  Ответить  
 
 автор: sim5   (12.11.2009 в 22:53)   письмо автору
 
   для: Владимир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 - сам скрипт.

  Ответить  
 
 автор: Владимир55   (13.11.2009 в 00:09)   письмо автору
 
   для: 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?

  Ответить  
 
 автор: sim5   (13.11.2009 в 00:21)   письмо автору
 
   для: Владимир55   (13.11.2009 в 00:09)
 

Ну если вы как строку передаете, то конечно eval. Но обязательно пропустить строку через функции, о которых сказано выше. И скрипт лучше держать не в элементе документа, типа '#content', а в самом документе. Если же это просто набор данных для встраивания в определенное место страницы, то лучше обработать данные на сервере, и передать результат работы как массив (массив объектов), который уже вывести подключаемым обычным способом скриптом, в необходимый элемент.

  Ответить  
 
 автор: Владимир55   (13.11.2009 в 14:55)   письмо автору
 
   для: 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'

  Ответить  
 
 автор: sim5   (13.11.2009 в 15:12)   письмо автору
 
   для: Владимир55   (13.11.2009 в 14:55)
 

У вас сам JS сценарий, мягко выражаясь не логичный. Давайте так - какая задача преследуется при загрузке некоего JS-сценария с сервера?

  Ответить  
 
 автор: Владимир55   (13.11.2009 в 15:18)   письмо автору
 
   для: sim5   (13.11.2009 в 15:12)
 

В самом первом сообщении 12.11.2009 в 19:09 имеется скрипт, который воводит два сообщения, причем вывод происходит таким образом, что одно сообщение периодически сменяется другим.

Мне нужно этот скрипт протащить на страницу через Аякс.

  Ответить  
 
 автор: sim5   (13.11.2009 в 15:21)   письмо автору
 
   для: Владимир55   (13.11.2009 в 15:18)
 

А что делает сам JS-сценарий в этом примере? Я там ничего не понял.
А чтобы вывести переиодически N-сообщений, например, постоянной ротацией, то нужно действовать не так.

  Ответить  
 
 автор: Владимир55   (13.11.2009 в 15:43)   письмо автору
 
   для: sim5   (13.11.2009 в 15:21)
 

Это код для периодической ротации, который мне дали на этом форуме. Может, есть вариант лучше, но я таковым не распологаю.

А приведенный работает вот так: http://vova.1gb.ru/222.htm

  Ответить  
 
 автор: sim5   (13.11.2009 в 16:14)   письмо автору
 
   для: Владимир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. Там есть примеры всех методов ее, полезно будет ознакомиться, опробовать их работу для понимания, и использовать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования