Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Help подгрузка js через onclick (https://javascript.ru/forum/jquery/62724-help-podgruzka-js-cherez-onclick.html)

sarex 26.04.2016 03:21

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 только если нажмет на "поиск"

Dilettante_Pro 26.04.2016 13:34

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);
} ();


И возникает вопрос - стоит ли подгружать скрипт динамически?

sarex 27.04.2016 05:13

к сожелению не помогло, у нас автокомплит работает не через 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)} 
	};

Dilettante_Pro 27.04.2016 11:13

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.