Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое подключение PHP+JS, не работает :( 
:(
    Опции темы
Wolf1994
Дата 3.3.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Можно ли реализовать динамическое подключение PHP+JS-скриптов на HTML-страничке? Нашёл готовый пример: http://forum.spravkaweb.ru/index.php?showtopic=466
Но ничего путного не получилось smile

Вот код:

index.php:
Код

print '<script type="text/javascript" src="'.$lex_path.'scripts.js"></script>'."\n";
print '<script id="reload" type="text/javascript" src=""></script>'."\n";
//отсюда же вызывается pickword ();


scripts.js:
Код

function element(id) //Функция поиска объекта в документе по Id в разных браузерах
{
   if(document.getElementById)
       return document.getElementById(id);
   if(document.all)
       return document.all(id);
   if(document.layers)
       return document.layers(id);
}

function pickword(id)
{
 element("reload").src=lex_path+"reload.php";
}


reload.php, например:
Код

alert ('ok');


Сколько ни пытался - не смог заставить эти скрипты работать. Единственное что выяснил - при подмене "reload.php" из "index.php" он срабатывает (IE, но не FireFox), и если после этого переписать скрипт и вызывать его из "scripts.js", то он тоже срабатывает (IE), но сразу - не работает. Я думаю - какой-то глюк с очисткой кэша в Эксплорере. О других браузерах вообще молчу.

Но ведь на форуме dklab как-то работает динамическая подгрузка данных! smile

Это сообщение отредактировал(а) Wolf1994 - 3.3.2006, 16:19
PM MAIL WWW   Вверх
Ciber SLasH
Дата 3.3.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Свойство src у тэга SCRIPT только для чтения, но IE плевать на это, вот он и разрешает его изменять, а нормальные браузеры дают пинка.
Вот здесь что-то подобное: http://forum.vingrad.ru/index.php?showtopi...st&p=660272
PM   Вверх
Alx
Дата 3.3.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Wolf1994,
а зачем тебе вообще это нужно? какая цель?
почему ты хочешь пользоваться именно подгрузкой php-сценария, а не XMLHttpRequest или dklab-овской либой?

вообще, если ты хочешь подгружать php скрипт, то

Цитата

alert ('ok');

это бред. тогда уж
Код

echo "alert('ok');";
,

к тому же менять src у script`а браузеры действительно не позволяют, поэтому нужно просто каждый раз при желании подгрузить php-скрипт, возвращающий JS-код, надо создавать новый элемент SCRIPT, удаляя предыдущий.

почитай мою статью об этом, там есть и скриптик Cheba, который этим и занимается:

Код

<script src="" id="dataloader"></script>
<script>
// загрузка данных с сервера без прямого обновления страницы
// загрузка в src тега <script> php-файла 

function change_src()
{var link = "change_src.php?&act=" + document.getElementById("param1").value + "&rand=" + Math.random();
var old_s = document.getElementById('dataloader');
if (old_s)
{old_s.parentNode.removeChild(old_s);            
}
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.src = link;
s.id = 'dataloader';
document.getElementsByTagName('head')[0].appendChild(s);        
}
</script>


пример - http://alx.com.ru/stats/dataload/test.html


--------------------
PM MAIL WWW ICQ   Вверх
Wolf1994
Дата 3.3.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



2ALx:
Большое спасибо за пример. Иду тестировать.

Цитата(Alx @ 3.3.2006, 17:23 Найти цитируемый пост)
почему ты хочешь пользоваться именно подгрузкой php-сценария, а не XMLHttpRequest или dklab-овской либой?

Об этих методах я ничего не знал. Воспользовался поиском: http://www.webmascon.com/topics/technologies/13a.asp , но это как-то слишком сложно. Твой пример мне понравился больше и, насколько я понял, у него бОльшая совместимость.

С меня (+).
PM MAIL WWW   Вверх
Wolf1994
Дата 3.3.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Попробовал. Возникло два вопроса. В порядке убывания важности:
1. Понял, что адрес создаваемого скрипта должен быть динамическим (rand), иначе Opera и FireFox кэшируют скрипт и больше не выполняют. НО, Эксплорер не всегда повторно выполняет скрипт даже в случае с динамическим адресом! В чём глюк?

2. Почему-то не удалось вывести из PHP-скрипта JS. Пробовал:
Код

print '<script type="text/javascript">'."\n";
print '//<![CDATA['."\n";
print "alert ('oook!!!');";
print '//]]>'."\n";
print '</script>'."\n";


Код

print "alert ('oook!!!');";


Код

$content = <<< EOD
alert ("<span style='color: red; font: 20pt bold sans-serif'>ß èç PHP :)</span>");
EOD;
echo $content;


Код

alert ('oook!!!');


smile
PM MAIL WWW   Вверх
Alx
Дата 3.3.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Код

print "alert ('oook!!!');";

Добавлено @ 21:02
должно работать.
выложи весь скрипт, плз!


--------------------
PM MAIL WWW ICQ   Вверх
Wolf1994
Дата 3.3.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



scripts.js:
Код

function change_src(link)
{
 var old_s=document.getElementById('reload');
 if (old_s)
 {
  old_s.parentNode.removeChild(old_s);            
 }
 var s = document.createElement('script');
 s.setAttribute('type', 'text/javascript');
 s.src=link;
 s.id='reload';
 document.getElementsByTagName('head')[0].appendChild(s);        
}

function pickword(id)
{
 //Обращение:
 change_src(lex_path+"reload.php?rand="+Math.random());
}


reload.php:
Код

<?php
print "alert ('oook!!!');";
?>


И, ещё очень беспокоит, что данный скрипт не всегда повторно срабатывает в IE6 smile (тестировал через использование "чистого" PHP - JS - не работает).
Добавлено @ 21:37
Забыл: <script id='reload'> - с этим всё в порядке.
PM MAIL WWW   Вверх
Wolf1994
Дата 3.3.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Ещё раз проверил. Под FireFox и Opera код работает идеально, а под IE глючит: PHP подключается невсегда, а если и подключается, не даёт выполнится JS.
PM MAIL WWW   Вверх
Wolf1994
Дата 3.3.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Выяснил ещё интересную вещь. Под IE срабытывает приведённый вариант и "беспредельный" вариант (со сменой src), только, если после запроса PHP-скрипта в основном (вызывающем) скрипте дать alert(); smile В этом случае скрипт работает и как PHP, и как JS!!!

Вопрос. Что это за "вуду" и можно ли alert сменить на что-нибудь менее заметное, чтобы "магия" продолжала действовать под IE?
PM MAIL WWW   Вверх
Wolf1994
Дата 4.3.2006, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Точно. Под Эксплорером не хватает времени на выполнение скрипта - в результате одной ошибки это подтвердилось...

Нашёл наиболее приемлемым использовать iframe. Полоса загрузки - это даже плюс - посетитель должен видеть, что расходуется его траффик, IMHO. Во всех браузерах прошло "на ура", был глюк, но его удалось "добить".

Всем спасибо.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.