Help подгрузка js через onclick
Здравствуйте одно форумчане, прошу вас о помощи в переделке/доработке скрипта сразу хотел бы предупредить что сам я в js валенок но надеюсь на вашу снисходительность.
Я нашел у вас скрипт который подходит для моей задачи, он подгружает js файл с кодом по нажатию на ссылку/onclick Скрипт без сомнений работает код подгружается но проблема в том что он не выполняется. Конкретнее В search_hints.js файле находится одна переменная var search_hints = [{label:"похожий запрос", value:"ссылка на запрос"} она отвечает за подсказки в поисковике сайта Проблема в том что она работает если подключить файл через: <script src="http://saite/js/search_hints.js"></script> но если использовать скрипт: function MyFunc(){ var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'http://saite/js/search_hints.js'; var ss = document.getElementsByTagName('script')[0]; ss.parentNode.insertBefore(s, ss); } то search_hints.js подгружается но подсказки в поисковике не работают. Прошу вас помогите мне сделать чтоб js код подгружался из файла и выполнялся. Я это делаю для ускорения работы сайта чтоб пользователь подгружал тяжелый search_hints.js только если нажмет на "поиск" |
sarex,
На самом деле подсказки работают, но не сразу: Попробуйте MyFunc(); var waitHints = function() { var timerId = setTimeout(function go() { if (!window.search_hints) { setTimeout(go, 100) } else { clearTimeout(timerId); alert(JSON.stringify(search_hints[0])); } }, 100); } (); И возникает вопрос - стоит ли подгружать скрипт динамически? |
к сожелению не помогло, у нас автокомплит работает не через json формат, а в види джава массива.
Проблему решили: function MyFunc(){ if( document.getElementById('s13')) {} else { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.id = "s13" s.src = '/js/search_hint.js'; document.getElementById('fot_test').appendChild(s)} }; |
sarex,
Похоже, вы меня дважды не поняли. Во-первых, я использовал JSON.stringify только для того, чтобы нормально отобразить в alert первый элемент вашего массива search_hints - для визуализации того факта, что массив загружен. Вот зачем нужен JSON.stringify - сравните результат работы двух алертов: var search_hints = [{label:"похожий запрос", value:"ссылка на запрос"}, {label:"другой запрос", value:"ссылка на другой запрос"}]; alert(search_hints[0]); alert(JSON.stringify(search_hints[0])); Вы же можете использовать этот массив так, как вам нужно. Во-вторых, этот массив доступен не сразу после запуска MyFunc, а только после завершения загрузки скрипта и обработки его DOM. Моя функция waitHints ждет появления массива в DOM. Поэтому я что-то сомневаюсь, что вам удалось решить проблему изменением места размещения скрипта - дело не в месте, а во времени. Я попробовал ваш новый вариант - результат тот же, массив доступен не сразу. |
Часовой пояс GMT +3, время: 23:23. |