|
|
|
| Всем привет, столкнулся с проблемой.
Есть скрипт - script.php в котором есть js-скрипт и некий код. В этом скрипте через ajax подгружаем форму из скрипта post.php
И проблема в том, что когда запрос правильно обработан, в post.php нужно выполнить js-скрипт. Но он не хочет выполняться, если поместить ссылку и нажать на неё:
<a href="#" onclick='delform("33");'>Убрать</a>
|
то скрипт выполняется, как надо.
Пробовал даже сделать простой alert, просто выставив его в самом верху скрипта post.php, но ноль реакции, он выполняется, если только явно открыть в браузере post.php
Вопрос: как без нажатия на кнопку(ссылку), выполнить функцию delform() в подгружаемом через ajax скрипте?
Заранее спасибо!! | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 11:20)
| | объявите js, который вы подгружаете, в том файле, который вызывает это подгружение. Другими словами, некий файл должен быть заранее уведомлен о возможных в дальнейшем вызовах функций js. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: АЯ
(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). | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 12:55)
| | Вам не предложили, вам разъяснили почему не хочет работать ваша СТРОКА как код, а вы этого так и не поняли. | |
|
|
|
|
|
|
|
для: sim5
(04.01.2010 в 13:37)
| | А на моей ситуации с примером можно разобраться? Я так и не понял пока... | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 13:41)
| | Вот если вы поймете, что строка текста это не JS код, и то как подключить эту строку к документу, и выполнить ее именно как код (о чем вам и рассказано выше), то притензий к АЯ у вас не будет, и вы без проблем сможете выполнить свой код хоть по клику, хоть по загрузке его. Прочитайте еще раз то, чего вам рассказали, и потренеруйтесь на примерах. | |
|
|
|
|
|
|
|
для: sim5
(04.01.2010 в 13:49)
| | Я не прошу, чтобы Вы меня как на уроке отчитывали и пытались вбить мне что-то в голову, я прошу конкретный пример, чтобы я смог понять. Пока я пример не увижу, дело не сдвинется... Неужели уже трудно помочь не только умным и правильным "примером из далека", но и конкретным, когда я полностью постарался расписать свою ситуацию, и если я не знаю, то я перед этим много чего пересмотрел, и ничего у меня не получилось.
Вот Вы знаете, как решить эту пустяшную проблему, и Вам понятен смысл слов АЯ - я же пока в раздумьях, которые абсолютно не просветили мне голову... | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 13:56)
| | Просто подставьте в написанную АЯ функцию вместо алерта, нужный вам скрипт. | |
|
|
|
|
|
|
|
для: Рома
(04.01.2010 в 14:26)
| | Спасибо, но а как после этих манипуляций сделать, чтобы скрипт выполнился в post.php (а сам находился в script.php)??? | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 14:33)
| | Прочитайте внимательно пост АЯ, особенно где есть магическое слово defer... | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2010 в 20:20)
| | Я прочитал это по слогам, но я не могу понять, как это всё сделать у себя.. что должно быть на "главной" странице, и что на подгружаемой... Хоть убейте... Сжальтесь, дайте подробный пример, чтобы работал... | |
|
|
|
|
|
|
|
для: Diplex
(04.01.2010 в 20:42)
| | У вас наверняка есть функция, которая вставляет результат работы php скрипта, подобная этой, правильно?
function Refresh()
{
if (req.readyState == 4)
{
document.getElementById(id).innerHTML = req.responseText;
}
}
|
И есть файл script.php, который содержит js код.
Так вот вы не вставляете результат в некий тег, а поступаете следующим образом
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. | |
|
|
|
|
|
|
|
для: Рома
(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>'; // Должно появиться окошко "Тревога!!!"
|
Но ничего не появляется... Что я делаю не так? | |
|
|
|
|
|
|
|
для: Diplex
(05.01.2010 в 00:24)
| | а responseText где? Вы вообще знакомы с аяксом? | |
|
|
|
|
|
|
|
для: Рома
(05.01.2010 в 00:48)
| | Был бы знаком, вопросов бы не было...
Зачем здесь responseText? Ведь я же разбираю хотя бы простой пример на alert'e. Как сделать, чтобы алерт срабатывал, может дальше сам додумаю... а то так вообще с места не двигаюсь... | |
|
|
|
|
|
|
|
для: Diplex
(05.01.2010 в 01:08)
| | >Зачем здесь responseText?
responseText содержит в себе информацию, взятую из другого файла, иначе что вы собрались вставлять. Ищите на форуме или в интернете "ajax с нуля" или "ajax с чего начать", там есть готовые примеры. Разберитесь сначала с принципом действия этой технологии. (там всего-то 16 строчек, и среди них найдете responseText). Потом код АЯ станет вам понятен. | |
|
|
|
|
|
|
|
для: Рома
(05.01.2010 в 01:28)
| | Разбирался я уже с "нуля", есть свои наработки, чтобы отправлять данные без перезагрузки и тд, есть в коде и responseText... но он же для примера с alert не нужен, у меня же, когда я подгружаю данные из post.php и там ссылка есть с онклик, я на неё жму и у меня всё происходит.. как сделать, чтобы без нажатия произошло...... мне же просто нужно как-то "объединить" два файла. Если не затруднит, сделайте рабочий пример для алерта, у меня уже нервы сдают от безысходности... Просто два листинга нужно, файл1 и файл2, чтобы я их создал, и всё работало... а дальше я уже сам... | |
|
|
|
|
|
|
|
для: Diplex
(05.01.2010 в 01:32)
| | только завтра, а вы свои "наработки" хоть выложите, давно надо было, хоть было б что править.
З.ы. даже алерт нельзя заставить работать без responseText. | |
|
|
|
|
|
|
|
для: Рома
(05.01.2010 в 01:41)
| | ВСЁ! ПОЛУЧИЛОСЬ! Пока не понял как, но работает :)
Всем спасибо! | |
|
|
|
|
|
|
|
для: 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 () (страница станет невидимой) | |
|
|
|
|
|
|
|
для: АЯ
(05.01.2010 в 02:49)
| | Спасибо, тоже надо поизучать)) | |
|
|
|
|
|
|
|
для: АЯ
(05.01.2010 в 02:49)
| | У меня на этапе загрузки получаю вот такой <script language="JavaScript" src="http://www.drweb.com/export/news/?c=9&lng=ru"></script>
Ни как не могу запустить | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2010 в 23:26)
| | Это только в IE работает же... Но эффект нужен именно такой... | |
|
|
|
|
|
|
|
для: АЯ
(04.01.2010 в 12:35)
| | Очень полезная информация, и где вы только этому всему поначитались? | |
|
|
|
|
|
|
|
для: Рома
(04.01.2010 в 13:33)
| | Интересная тема. Два дня искал нечто подобное.
Как выполнять JavaScript подгруженный аяксом понятно. Но эт если он единственное что есть в запрашиваемой странице. А если там ещё куча всего? Получается мы теги <script> ставим и межу ними грузим всё что пришло по запросу аякса. Выходит ошибка, т.к. между данными тегами должен быть только скрипт. Получается надо весь ответ парсить??? Выдёргивать куски кода, а остальное писать как html. Если я всё правильно понял, то это просто жууутко. | |
|
|
|
|
|
|
|
для: EvgenLog
(22.01.2010 в 22:23)
| | >"А если там ещё куча всего?"
Вы так говорите, будто эта "куча всего" сделана будет не вами ЛИЧНО, а чужим посторонним дядей.
Вы (именно вы, а не кто-то другой) делаете PHP-файл, который будет формировать те данные, которые вам и нужно отправить в браузер.
Так зачем вы САМИ будете смешивать в этих возвращаемых данных JS-код с просто HTML-кодом таким жутким образом, что вам САМОМУ придётся долго и нудно "парсить" в браузере полученный результат? :-))
Неужто вам трудно сделать PHP-файл таким образом, чтобы JS-код в респонсе был отделён от HTML-кода простейшим разделителем? Что-то типа такого:
'alert (123);=====<div>бла-бла</div>'
| , чтобы в скрипте браузера просто разделить респонс на две части по разделителю '=====' | |
|
|
|
|
|
|
|
для: АЯ
(22.01.2010 в 22:35)
| | Собственно так и сделал. )) Сплитом поделил на од и НЕ код. Хорошая тема. Спасибо. | |
|
|
|
|
автор: Тратата (27.10.2013 в 18:38) |
|
|
для: EvgenLog
(22.01.2010 в 23:43)
| | [Модератор] Не нужно оживлять темы 2010 г.в. Начинайте новую, описывайте проблему, будем решать.... | |
|
|
|