Jump to content
  • 0

Связка: AJAX и JavaScript


Юзер
 Share

Question

Есть

куда Ajax отдает свои данные. В данных есть еще один
, у которого в стиле прописано в качестве бэкграунда картинка и есть функция JavaScript, которая позволяет выставить координаты на картинке.

Если нет Ajax-а, то функция работает замечательно: при инициализации она находит объект с id="shema" и выполняет свои функци.. При загрузке же аяксом - не находит. Пишет ошибку, что не найден объект. Я уже пробовал в тексте, который отдает аякс, т.е. в серверном скрипте вызывать функцию инициализации - ничего..

Неужели нельзя выполнять функции JavaScript с объектами, которые подгрузились с пом. Ajax?

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0
Неужели нельзя выполнять функции JavaScript с объектами, которые подгрузились с пом. Ajax?

Можно.

Только вот интересно, что вы понимаете под словом "Ajax", если думаете что он так отделен от Javascript???

Link to comment
Share on other sites

  • 0

Мне тоже кажется, что можно.

Понимаю объект ActiveXObject с помощью которого можно обратиться на сервер и получить от него какие-либо данные и вставить их в страницу без ее перезагрузки. Верно? Верно.

А почему тогда image = getObj('schema'); в случае статического указания находит объект schema, а в случае подгрузки - нет? Надо ее вызвать после того, как загрузился сам объект? Пытаюсь:

в серверном скрипте пишу

echo "

";

echo "<script> //<-- image = getObj('schema'); --> ";

т.е. после того, как, по идее, появляется сам объект, делается попытся начать с ним работу

Link to comment
Share on other sites

  • 0
Нет, не выполняется.

Вот именно. Загляните в любую известную Вам библиотеку с ajax и посмотрите, как "они" реализуют подгрузку скриптов...

Хотя, если разобраться, если эта самая schema "оказалась" на страничке, то найти ее не составит труда (также, как и в случае "статического указания")...

Link to comment
Share on other sites

  • 0

Если сделать "тупо" и в серверном скрипте написать,

echo "

":

то алерт выполняется.

Когда я смотрю "сгенерированный исходник" страницы в Лисе, то подключаемый скрипт она показывает так, как надо.

А не работает.

Блин. Код, который получается после генерации Аяксом копирую и вставляю в статичную страницу - работает. Сгенерированный не работает. :)

Link to comment
Share on other sites

  • 0
Блин. Код, который получается после генерации Аяксом копирую и вставляю в статичную страницу - работает. Сгенерированный не работает. :)

function applySource(aStr) { 
var js = aStr.match(/<script.*?>(.|[rn])*?</script>/gi),
node = document.createElement('script');
if (!js) {
return false;
}
js = js.join('').replace(/</?script.*?>/gi, '');
document.getElementsByTagName('head')
.item(0)
.appendChild(node);
if (window.ActiveXObject) {
node.text = js;
} else {
node.appendChild(document.createTextNode(js));
}
}

Т.к. у меня дома на кухне "ajax'а" так и не нашлось, то и проверял "по-домашнему" - вставлял в текстовую область код html со сценариями и кликал, вот так, короче говоря:

<textarea rows='30' cols='70'
onclick='applySource(this.value)'></textarea>

Регвыр не для тщательного анализа, конечно, да и метод match - упрощенный вариант. Однако если попадется какой-нибудь сложный случай, то будет интересно попытаться разобраться...

Link to comment
Share on other sites

  • 0

AKS

что это за конструкция? :)

.*?

разве там не достаточно просто

.*

здесь

(.|[rn])*?

также

(.|[rn])*

или лучше вообще

.*

и выставить флаг m

для node желательно еще и

setAttribute("type", "text/javascript")

не обязательно конечно :P

я не понимаю смысла такой конструкции

 if (window.ActiveXObject) {
node.text = js;
} else {
node.appendChild(document.createTextNode(js));
}

ИЕ ведь должен понять такое?

node.appendChild(document.createTextNode(js));

Link to comment
Share on other sites

  • 0
AKSчто это за конструкция? :)

? убирает "жадность" квантификаторов иначе если в примере скриптовых блоков несколько, то они сольются в один (от первого тега первого блока до последнего тега последнего, регулярное жадно вс? захватит)... ;-)

Link to comment
Share on other sites

  • 0
для node желательно еще и

setAttribute("type", "text/javascript")

А я про это совсем забыл...

ИЕ ведь должен понять такое?

node.appendChild(document.createTextNode(js));

Свой IE на "такое" я так и не смог "уговорить". :)

...лучше вообще

.*

и выставить флаг m.

С этим "флажком" я "поплутал" немножко, да и бросил его (без него мне стало легче :P ). Попробуйте, может у Вас чего-нибудь с ним получится...

Link to comment
Share on other sites

  • 0
AKSчто это за конструкция? :)

? убирает "жадность" квантификаторов иначе если в примере скриптовых блоков несколько, то они сольются в один (от первого тега первого блока до последнего тега последнего, регулярное жадно вс? захватит)... ;-)

А, понятненько, разобрался :P Пасибки.

если используется сразу после одного из квантификаторов *, +, ? или {}, делает квантификатор нежадным (совпадает минимальное число раз), что противоположно действию по умолчанию, когда квантификатор жадничает (совпадает максимальное число раз).

2 AKS

Я ведь забыл, что есть такая штучка как prototype.js :P

Вот как там это реализовано

<script[^>]*>([u0001-uFFFF]*?)</script>

и используется вместе с флагом m

Link to comment
Share on other sites

  • 0
Вот как там это реализовано

<script[^>]*>([u0001-uFFFF]*?)</script>

и используется вместе с флагом m

А что, такая конструкция пошустрее будет. Видать дядечька по имени Сэм не слабо поднаторел в этом деле...

Link to comment
Share on other sites

  • 0

можно попросить конечный релиз этой функции? и еще предусмотрена ли вероятность того что в тексте скрипта, в коментариях или в аргументах используются теги <script> ?

Link to comment
Share on other sites

  • 0
...можно попросить конечный релиз этой функции?

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

Регвыр не для тщательного анализа, конечно, да и метод match - упрощенный вариант.

Так что дальнейшая разработка - Ваша прерогатива. :)

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy