Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов JS-функции после вставки её AJAX-ом (https://javascript.ru/forum/events/18266-vyzov-js-funkcii-posle-vstavki-ejo-ajax-om.html)

creasysee 23.06.2011 20:02

Вызов JS-функции после вставки её AJAX-ом
 
После завершения аджакса вставляю скриптом:
$(divPreview).set('html',result.sText);

(это Mootools, не jQuery, но один хрен)
в DOM некий html код, содержащий в себе скрипт.
Вставляется следующее в некий внешний div с id='divPreview' (и это видно на вкладке Elements хрома), собственно это и есть данные из result.sText:
<div id="data_canvas1" style="position:relative; width:600px; height:480px;"></div>
<script type="text/javascript">
     window.addEvent("domready", function() {
          getTopicData("0,59", "data_canvas1");
     });
     function previewData1() {
          getTopicData("0,59", "data_canvas1");
     };
</script>

getTopicData - живая функция из внешнего *.js.
Далее, следующей строчкой скрипта я пытаюсь вызвать только что вставленную функцию previewData1:
window["previewData1"]();

P.S. для страховки пробовал и явно previewData1(); - тот же результат
Имею ошибку скрипта, дословно:
Uncaught TypeError: Object [object DOMWindow] has no method 'previewData1'

addEvent("domready"... здесь показан просто потому что он есть в пришедшем коде, но жить мешать не должен - domready уже был, и давно. Оставлен из-за совместимости с другими страницами и т.д. и т.п.

Есть мысли почему функция не вызывается? Хром же её уже видит?

creasysee 23.06.2011 20:21

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

creasysee 24.06.2011 13:36

Дальнейшее курево показало, что та часть, которая HTML, доступна из скрипта, т.е:
alert1($('data_canvas1').get('tag'));

честно выдает 'div', но функция, которая по-видимому юзается скриптом из коллекции document.scripts, в эту коллекцию не попала.

Надо как-то проапдейтить коллекцию скриптов...

creasysee 24.06.2011 14:00

Похоже - это ж*па, даже на StackOverflow ничего не нашел. В моем случае пока вижу одно решение, если через скрипт ничего не передать (var x = "0,59"; var y = "data_canvas1"; - тоже будут недоступны), то аджаксом вместе с дивом присылать hidden input c данными, а потом скриптом их читать и и уже пихать в живую функцию.


Часовой пояс GMT +3, время: 06:36.