Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызвать функцию из подключенного js файла (https://javascript.ru/forum/events/48508-vyzvat-funkciyu-iz-podklyuchennogo-js-fajjla.html)

1lider 06.07.2014 22:32

Вызвать функцию из подключенного js файла
 
Здравствуйте!

У меня есть два файла main.js и second.js. Как правильно подключить к html странице файл second.js и вызвать расположенную в нём функцию my_function();?

Подключаю таким способом:

Файл main.js

var new_script = document.createElement('script');
new_script.type = 'text/javascript';
new_script.src = 'http://site.ru/second.js';
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(new_script);
// дальше сразу же вызываю функцию расположенную в файле second.js
// выходит следующая ошибка - Предполагается наличие объекта
my_function();


Файл second.js

function my_function() {
   alert("HELLO");
}

Sweet 06.07.2014 22:45

1lider, используй событие load. Подробности тут.

Vlasenko Fedor 06.07.2014 22:50

if (new_script.readyState) {
	new_script.onreadystatechange = function () {
		if (new_script.readyState == "loaded" || new_script.readyState == "complete") {
			new_script.onreadystatechange = null;
			my_function();
		}
	};
} else {
	new_script.onload = function () {
		my_function();
	};
}

1lider 06.07.2014 23:41

БлагоДарю Вас от Души. Очень помогли.

1lider 07.07.2014 17:39

А что если сделать вот так:

var new_script = document.createElement('script');
new_script.type = 'text/javascript';
new_script.src = 'http://site.ru/test.php?callback=my_test';
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(new_script);


Как потом вызвать функцию callback, пришедшую от сервера и вывести на алерт массив в ней содержащийся?

На сервере делаю следующее(файл test.php):

$result = array('result' => 'Hello world!');
echo $_GET['callback']."(".json_encode($result).")";
exit;

Vlasenko Fedor 07.07.2014 22:14

1lider,
спрашиваешь про одно, а пишешь про другое. При чем здесь загрузка скриптов
$.get( "http://site.ru/test.php?callback=my_test", function( data ) {
	alert(data);
});

1lider 08.07.2014 16:41

Цитата:

спрашиваешь про одно, а пишешь про другое.
Прошу прощения если не по теме. У меня остался последний вопрос, относительно этого:

if (new_script.readyState) {
	new_script.onreadystatechange = function () {
		if (new_script.readyState == "loaded" || new_script.readyState == "complete") {
			new_script.onreadystatechange = null;
			my_function();
		}
	};
} else {
	new_script.onload = function () {
		my_function();
	};
	// сюда можно добавить следующее(не для IE)
	new_script.onerror = function () {
		alert("Опс..');
	};	
}


Для отлова ошибок для всех браузеров(кроме IE), можно поставить .onerror. А как отлавливать ошибку в IE? Даже если скрипт не подлючился, new_script.readyState всё равно возвращает loaded.

1lider 08.07.2014 17:50

Единственный вариант который пока приходит в голову, это проверка существования функции my_function().


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