#0
by План счетов
Есть сайт. На основной странице ссылка на скрипты: <script type="text/javascript" src="<?php echo $baseUrl ?>/public/scripts/jquery-1.4.2.min.js"></script> На сайте есть блок. доступный нескольким пользователям, данные в этот блок подгружаются AJAX-ом, HTML текст в этом блоке, содержит ссылку на скрипт: <script src="; type="text/javascript"></script> После загрузки AJAX-ом этот подгружаемый скрипт не работает, я так понимаю т.к. он не загружен, т.к. AJAX вернул мне только текст, а загрузка скрипта не произошла. Если этот скрипт вставить в начало основной страницы, то все работает. Если страницу которую я хочу получить загружаю без использования AJAX-а то тоже все работает. Но я так не хочу, хочу чтоб скрипт заработал после загрузки AJAX-a. Как загрузить данный скрипт после того как AJAX добавит его в блок?
#2
by qeos
события, не? я хз что такое AJAX.. я вот пользуюсь JQuery.. у него есть технология ажах... и события по завершении и т.п.
#3
by План счетов
Да просто гружу, в вроде все описал. Есть страница, есть в ней сслки на скрипты которые нужны всем, есть в ней <div id=mydiv> еще есть ссылка по которой запускается аякс, аякс в mydiv добавляет HTML текст Element.innerHTML = req.responseText; в req.responseText есть ссылка на скрипт на api-maps.yandex.ru и вот этот скрипт не работает, если он добавлен аяксом
#4
by План счетов
Вроде получается, пока реализовал так: после обработки Аякса в if (req.readyState == 4){ if(req.status==200){ // загрузка стороннего скрипта var script = document.createElement('script'); script.type = 'text/javascript'; script.src = ''; document.body.appendChild(script); // И далее мой скрипт start_api_yandex;
#5
by kokamoonga
Если уж на то пошло, то инициализацию лучше связывать не с завершением ajax-вызова, а с событием onload самого скрипта, ибо эти два события напрямую никак не связаны. Вызов может завершиться, а скрипт не подгрузиться и будет эффект как в только без видимых причин. Если же ajax подгружает что-то необходимое для работы скрипта помимо его самого, то в callback ajax-вызова можно ставить какой-то флаг, или при инициализации проверять наличие необходимого на странице или в самой функции start_api_yandex. if (req.readyState == 4){ if(req.status==200){ // загрузка стороннего скрипта var script = document.createElement('script'); script.type = 'text/javascript'; script.src = ''; script.onload = start_api_yandex; document.body.appendChild(script); Или просто в исходном коде ответа: <script src=";; type="text/javascript" onload="start_api_yandex; "></script>
#6
by План счетов
>> Вызов может завершиться, а скрипт не подгрузиться Пока так и получается, даже если и использовать onload script.onload = start_api_yandex; все равно скрипт не успевает загрузится стартует мой start_api_yandex и выдает ошибку. В коде для проверки был Alert, с ним скрипт успевает загрузится, ошибки нет, как глушу Alert - мой скрипт не работает. что не верно делаю?
#8
by План счетов
код уже тут уже весь дан function StartAjax_get_data($baseUrl, $URL, .......................... if (req.readyState == 4){ if(req.status==200){ var script = document.createElement('script'); script.type = 'text/javascript'; script.src = ''; document.body.appendChild(script); script.onload = start_api_yandex($URL); function start_api_yandex($URL){ //alert('Пауза, для продолжения нажмите ОК'); var myMap = new ymaps.Map("map", {center: [61.6626, 50.8405],zoom: 16}); Если alert закоментирован то ошибка ymaps - неопределен
#9
by План счетов
+ и так тоже пробовал script.onload = start_api_yandex($URL); document.body.appendChild(script);
#10
by kokamoonga
как вариант можно попросить подождать. Что-то типа так: function start_api_yandex($URL, d) { //alert('Пауза, для продолжения нажмите ОК'); if (!ymaps) { window.setTimeout(start_api_yandex($URL, d + 1)); } else { var myMap = new ymaps.Map("map", {center: [61.6626, 50.8405], zoom: 16}); } }
#11
by kokamoonga
+ window.setTimeout(start_api_yandex($URL, d + 1), 500); // время ожидания разумеется надо указать.
#13
by kokamoonga
имей в виду, что это что-то среднее между кодом и псевдокодом. например если ymaps === undefined, тогда !ymaps === true
#14
by План счетов
Все оказалось чуть сложнее. не работает, валит в ошибку стек переполнен. Смотрю дамп загрузки скрипта, нет события onload как я понял, скрипт не загружен, и событие загрузки не возникает. Поиском нашел: сделал, как там написано: function afterLoad { start_api_yandex($URL); } script.onreadystatechange = function { if (this.readyState == "complete") { // на случай пропуска loaded afterLoad; } if (this.readyState == "loaded") { setTimeout(afterLoad, 0); // // убираем обработчик, чтобы не сработал на complete this.onreadystatechange = null; } } и заработало.
#15
by kokamoonga
у этого кода есть одно слабое место:) "Пример вызывает afterLoad после загрузки скрипта. Работает только в IE"
#16
by Torquader
Когда писал обработки под старый Ie понял, что если хочется рабочий скрипт, то загрузить его в память как тескт, а потом скормить eval и всё. Кстати, таким "макаром" можно переопределять функции.
#17
by kokamoonga
Проще использовать библиотечные обертки. С тем же jQuery таких проблем никогда не имел.
Тэги: Веб-мастеринг
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как к 1С подгрузить файл DLL
- Не сохраняется после в .mht в Explorer после установки винды.
- 7.7Бух+SQL. Конфигуратор вылетает после добавления нового счета в план счетов
- Передать управление из JavaScript в 1С (с передачей параметра) в поле HTML
- javascript в Поле HTML документа. Видимость функций javascript.
- Есть ресурс откуда можно подгрузить адрес контрагента по ИНН и КПП ?
- Пропадает список баз после синего экрана, после перезагрузки возвращается
- Проблема с индексом после добавления субконто счету - 2
В этой группе 1С
- Добавить Колонку в таблицу значений в форме в 1с8
- Таблица значений как параметр расшифровки
- СКД выделение пустых значений ресурсов цветом
- Управление торговлей 11. Производительность. Файловый режим. Сетевая
- 1С БГУ. КАк загрузить данные из Барс.WEB-своды
- Загрузка курсов валют в БП 2.0 через прокси
- СКД. Остатки по каждой декаде отчета
- v8: БП 3.0 комментарий в журнале платежных поручений?
- Выделенные строки в тз после удаления строк.
- Снова тормоза при подборе номенклатуры или что такое RLS?
- Как в БП 3.0 организовать кассу по обособленному подразделению?
- Запуск 1с 8.2 через OpenVPN
- Выгрузка из 1С в папку текущего пользователя
- Некорректные цены в Помощнике продаж УТ 11.1
- не заполняется графа Текущий налог на прибыль (2410) БП 2.0
- СКД. Остатки и обороты в одной колонке
- Обмен данными УТ 10.3 БП 3.0
- Списание материалов на собственные нужды
- вывод картинки в прайс лист ут 10.3
- Кредиторская задолженность по срокам долга в УТ11 глючит?