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, время: 20:05. |