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

HTML+CSS+JavaScript

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

 

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

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

тема: Не выполняется js в окне подгруженным через ajax
 
 автор: Diplex   (04.01.2010 в 11:20)   письмо автору
 
 

Всем привет, столкнулся с проблемой.

Есть скрипт - script.php в котором есть js-скрипт и некий код. В этом скрипте через ajax подгружаем форму из скрипта post.php
И проблема в том, что когда запрос правильно обработан, в post.php нужно выполнить js-скрипт. Но он не хочет выполняться, если поместить ссылку и нажать на неё:

<a href="#" onclick='delform("33");'>Убрать</a>


то скрипт выполняется, как надо.

Пробовал даже сделать простой alert, просто выставив его в самом верху скрипта post.php, но ноль реакции, он выполняется, если только явно открыть в браузере post.php

Вопрос: как без нажатия на кнопку(ссылку), выполнить функцию delform() в подгружаемом через ajax скрипте?

Заранее спасибо!!

  Ответить  
 
 автор: Рома   (04.01.2010 в 12:24)   письмо автору
 
   для: Diplex   (04.01.2010 в 11:20)
 

объявите js, который вы подгружаете, в том файле, который вызывает это подгружение. Другими словами, некий файл должен быть заранее уведомлен о возможных в дальнейшем вызовах функций js.

  Ответить  
 
 автор: АЯ   (04.01.2010 в 12:35)   письмо автору
 
   для: Diplex   (04.01.2010 в 11:20)
 

Постарайтесь УЯСНИТЬ, что ajax'ом вы ВСЕГДА получаете от сервера не "какой-то код" (PHP, JS, HTML и прочее), а всего лишь некую СТРОКУ (набор символов).
Этот получаемый "набор символов" с помощью JS надо ПРЕВРАТИТЬ во что-то.

Например, в HTML-код - надо полученный "набор символов" записать как innerHTML какого-то тега страницы.

В случае JS-кода - надо на каком-то теге страницы создать объект <SCRIPT> и ВОВНУТРЬ этого объекта прописать этот самый "набор символов" как код скрипта. Вот только тогда браузер сможет понять, что "набор символов" - это исполняемый JS-код.

Пример:
<html>
<head>
<script>
function myFunc ()
{
//положим, получили от сервера респонс-текст, содержащий JS-код:
var x = "alert ('YES');\ndocument.body.style.backgroundColor = 'red';";

var y = document.createElement ('script'); //Создаёте новый тег <SCRIPT>
y.defer = true; //Даёте разрешение на исполнение скрипта после его "приживления" на странице
y.text = x; //Записываете полученный от сервера "набор символов" как JS-код
document.body.appendChild (y); //"Приживляете" тег <SCRIPT>
}
</script>
</head>
<body>
<hr><u align="center" onclick="myFunc ()">Запуск получения "кода" от сервера</u><hr>
</body>
</html>

  Ответить  
 
 автор: Diplex   (04.01.2010 в 12:55)   письмо автору
 
   для: АЯ   (04.01.2010 в 12:35)
 

Спасибо за ответы, но толку мало :)
Я так и не понял, как мне запустить функцию не нажатием, а чистым публикованием скрипта, допустим:

<script type="text/javascript"> delform (); </script>


Или может как-то по-другому...

А так, как АЯ, предложил у меня при нажатии и у самого всё срабатывает...

Подробнее:

Код в script.php

function delform(strs) 

document.getElementById('pos_form').innerHTML = "всякий код"; 



В post.php мне нужно вызвать его без нажатия на кнопку... (а тем временем он отобразится в script.php).

  Ответить  
 
 автор: sim5   (04.01.2010 в 13:37)   письмо автору
 
   для: Diplex   (04.01.2010 в 12:55)
 

Вам не предложили, вам разъяснили почему не хочет работать ваша СТРОКА как код, а вы этого так и не поняли.

  Ответить  
 
 автор: Diplex   (04.01.2010 в 13:41)   письмо автору
 
   для: sim5   (04.01.2010 в 13:37)
 

А на моей ситуации с примером можно разобраться? Я так и не понял пока...

  Ответить  
 
 автор: sim5   (04.01.2010 в 13:49)   письмо автору
 
   для: Diplex   (04.01.2010 в 13:41)
 

Вот если вы поймете, что строка текста это не JS код, и то как подключить эту строку к документу, и выполнить ее именно как код (о чем вам и рассказано выше), то притензий к АЯ у вас не будет, и вы без проблем сможете выполнить свой код хоть по клику, хоть по загрузке его. Прочитайте еще раз то, чего вам рассказали, и потренеруйтесь на примерах.

  Ответить  
 
 автор: Diplex   (04.01.2010 в 13:56)   письмо автору
 
   для: sim5   (04.01.2010 в 13:49)
 

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

Вот Вы знаете, как решить эту пустяшную проблему, и Вам понятен смысл слов АЯ - я же пока в раздумьях, которые абсолютно не просветили мне голову...

  Ответить  
 
 автор: Рома   (04.01.2010 в 14:26)   письмо автору
 
   для: Diplex   (04.01.2010 в 13:56)
 

Просто подставьте в написанную АЯ функцию вместо алерта, нужный вам скрипт.

  Ответить  
 
 автор: Diplex   (04.01.2010 в 14:33)   письмо автору
 
   для: Рома   (04.01.2010 в 14:26)
 

Спасибо, но а как после этих манипуляций сделать, чтобы скрипт выполнился в post.php (а сам находился в script.php)???

  Ответить  
 
 автор: ddhvvn   (04.01.2010 в 20:20)   письмо автору
 
   для: Diplex   (04.01.2010 в 14:33)
 

Прочитайте внимательно пост АЯ, особенно где есть магическое слово defer...

  Ответить  
 
 автор: Diplex   (04.01.2010 в 20:42)   письмо автору
 
   для: ddhvvn   (04.01.2010 в 20:20)
 

Я прочитал это по слогам, но я не могу понять, как это всё сделать у себя.. что должно быть на "главной" странице, и что на подгружаемой... Хоть убейте... Сжальтесь, дайте подробный пример, чтобы работал...

  Ответить  
 
 автор: Рома   (04.01.2010 в 22:51)   письмо автору
 
   для: Diplex   (04.01.2010 в 20:42)
 

У вас наверняка есть функция, которая вставляет результат работы php скрипта, подобная этой, правильно?

 function Refresh()
 {
   if (req.readyState == 4)
   {
     document.getElementById(id).innerHTML = req.responseText;
   }
 }

И есть файл script.php, который содержит js код.
alert ('YES');

Так вот вы не вставляете результат в некий тег, а поступаете следующим образом

 function Refresh()
 {
   if (req.readyState == 4)
   {
      var x = req.responseText; // Присваиваете результат работы переменной
      var y = document.createElement ('script'); //Создаёте новый тег <SCRIPT>
      y.defer = true; //Даёте разрешение на исполнение скрипта после его "приживления" на странице
      y.text = x; //Записываете полученный от сервера "набор символов" как JS-код
      document.body.appendChild (y); //"Приживляете" тег <SCRIPT> // это делается вместо document.getElementById(id).innerHTML = ...
   }
 }

Все, при вызове Refresh будете лицезреть YES.

  Ответить  
 
 автор: Diplex   (05.01.2010 в 00:24)   письмо автору
 
   для: Рома   (04.01.2010 в 22:51)
 

Опять не получается. Описываю:

Файл script.php. В нём js-скрипт:


function ALARM() 
{
var x = alert('Тревога!!!');
var y = document.createElement ('script');
y.defer = true;
y.text = x;
document.body.appendChild (y);
}


Файл post.php. Подгрузили его через ajax и хотим выполнить при загрузке некоторое действие, в нашем случае функцию ALARM();


<script type="text/javascript"> ALARM(); </script>'; // Должно появиться окошко "Тревога!!!"


Но ничего не появляется... Что я делаю не так?

  Ответить  
 
 автор: Рома   (05.01.2010 в 00:48)   письмо автору
 
   для: Diplex   (05.01.2010 в 00:24)
 

а responseText где? Вы вообще знакомы с аяксом?

  Ответить  
 
 автор: Diplex   (05.01.2010 в 01:08)   письмо автору
 
   для: Рома   (05.01.2010 в 00:48)
 

Был бы знаком, вопросов бы не было...

Зачем здесь responseText? Ведь я же разбираю хотя бы простой пример на alert'e. Как сделать, чтобы алерт срабатывал, может дальше сам додумаю... а то так вообще с места не двигаюсь...

  Ответить  
 
 автор: Рома   (05.01.2010 в 01:28)   письмо автору
 
   для: Diplex   (05.01.2010 в 01:08)
 

>Зачем здесь responseText?
responseText содержит в себе информацию, взятую из другого файла, иначе что вы собрались вставлять. Ищите на форуме или в интернете "ajax с нуля" или "ajax с чего начать", там есть готовые примеры. Разберитесь сначала с принципом действия этой технологии. (там всего-то 16 строчек, и среди них найдете responseText). Потом код АЯ станет вам понятен.

  Ответить  
 
 автор: Diplex   (05.01.2010 в 01:32)   письмо автору
 
   для: Рома   (05.01.2010 в 01:28)
 

Разбирался я уже с "нуля", есть свои наработки, чтобы отправлять данные без перезагрузки и тд, есть в коде и responseText... но он же для примера с alert не нужен, у меня же, когда я подгружаю данные из post.php и там ссылка есть с онклик, я на неё жму и у меня всё происходит.. как сделать, чтобы без нажатия произошло...... мне же просто нужно как-то "объединить" два файла. Если не затруднит, сделайте рабочий пример для алерта, у меня уже нервы сдают от безысходности... Просто два листинга нужно, файл1 и файл2, чтобы я их создал, и всё работало... а дальше я уже сам...

  Ответить  
 
 автор: Рома   (05.01.2010 в 01:41)   письмо автору
 
   для: Diplex   (05.01.2010 в 01:32)
 

только завтра, а вы свои "наработки" хоть выложите, давно надо было, хоть было б что править.
З.ы. даже алерт нельзя заставить работать без responseText.

  Ответить  
 
 автор: Diplex   (05.01.2010 в 01:47)   письмо автору
 
   для: Рома   (05.01.2010 в 01:41)
 

ВСЁ! ПОЛУЧИЛОСЬ! Пока не понял как, но работает :)
Всем спасибо!

  Ответить  
 
 автор: АЯ   (05.01.2010 в 02:49)   письмо автору
 
   для: Diplex   (05.01.2010 в 01:32)
 

http://codecenter.awardspace.com/ajaxscript.html

Реализовано 4 (четыре) разных варианта:

1. Передача JS-кода и исполнение его (просто alert)

2. Передача текста функции chC () и принудительный запуск этой функции (изменение цвета шрифта + alert)

3. Передача текста безымянной функции и запуск её (изменение фона + alert)

4. Запуск существующей на html-странице функции с именем func_EXIST () (страница станет невидимой)

  Ответить  
 
 автор: Diplex   (05.01.2010 в 03:05)   письмо автору
 
   для: АЯ   (05.01.2010 в 02:49)
 

Спасибо, тоже надо поизучать))

  Ответить  
 
 автор: mmkulikov   (08.07.2013 в 15:28)   письмо автору
 
   для: АЯ   (05.01.2010 в 02:49)
 

У меня на этапе загрузки получаю вот такой <script language="JavaScript" src="http://www.drweb.com/export/news/?c=9&lng=ru"></script>
Ни как не могу запустить

  Ответить  
 
 автор: ddhvvn   (04.01.2010 в 23:26)   письмо автору
 
   для: Diplex   (04.01.2010 в 20:42)
 

>Вопрос: как без нажатия на кнопку(ссылку), выполнить функцию delform() в подгружаемом через ajax скрипте?
Например, выдав вашим post.php следующее
<script type="text/javascript" defer="defer">delform();</script>


http://www.w3schools.com/tags/att_script_defer.asp

  Ответить  
 
 автор: Diplex   (05.01.2010 в 00:17)   письмо автору
 
   для: ddhvvn   (04.01.2010 в 23:26)
 

Это только в IE работает же... Но эффект нужен именно такой...

  Ответить  
 
 автор: Рома   (04.01.2010 в 13:33)   письмо автору
 
   для: АЯ   (04.01.2010 в 12:35)
 

Очень полезная информация, и где вы только этому всему поначитались?

  Ответить  
 
 автор: EvgenLog   (22.01.2010 в 22:23)   письмо автору
 
   для: Рома   (04.01.2010 в 13:33)
 

Интересная тема. Два дня искал нечто подобное.
Как выполнять JavaScript подгруженный аяксом понятно. Но эт если он единственное что есть в запрашиваемой странице. А если там ещё куча всего? Получается мы теги <script> ставим и межу ними грузим всё что пришло по запросу аякса. Выходит ошибка, т.к. между данными тегами должен быть только скрипт. Получается надо весь ответ парсить??? Выдёргивать куски кода, а остальное писать как html. Если я всё правильно понял, то это просто жууутко.

  Ответить  
 
 автор: АЯ   (22.01.2010 в 22:35)   письмо автору
 
   для: EvgenLog   (22.01.2010 в 22:23)
 

>"А если там ещё куча всего?"

Вы так говорите, будто эта "куча всего" сделана будет не вами ЛИЧНО, а чужим посторонним дядей.

Вы (именно вы, а не кто-то другой) делаете PHP-файл, который будет формировать те данные, которые вам и нужно отправить в браузер.
Так зачем вы САМИ будете смешивать в этих возвращаемых данных JS-код с просто HTML-кодом таким жутким образом, что вам САМОМУ придётся долго и нудно "парсить" в браузере полученный результат? :-))

Неужто вам трудно сделать PHP-файл таким образом, чтобы JS-код в респонсе был отделён от HTML-кода простейшим разделителем? Что-то типа такого:
'alert (123);=====<div>бла-бла</div>'
, чтобы в скрипте браузера просто разделить респонс на две части по разделителю '====='

  Ответить  
 
 автор: EvgenLog   (22.01.2010 в 23:43)   письмо автору
 
   для: АЯ   (22.01.2010 в 22:35)
 

Собственно так и сделал. )) Сплитом поделил на од и НЕ код. Хорошая тема. Спасибо.

  Ответить  
 
 автор: Тратата   (27.10.2013 в 18:38)
 
   для: EvgenLog   (22.01.2010 в 23:43)
 

[Модератор] Не нужно оживлять темы 2010 г.в. Начинайте новую, описывайте проблему, будем решать....

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

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