У меня есть "конечный день", и я не могу заставить этот простой кусок кода работать. Все, что я хочу сделать, это повторное использование функции в другом скрипте, который я использую.
Например, в javascript AI есть:
function rollLink(){
//code that does something amazing
};
rollLink();
В другом JS файле (позвольте называть его B), я пытаюсь повторно использовать функцию rollLink
как часть простого вызова AJAX:
$.ajax({
url: bla,
data: bla,
success:function(data) {
$('#hero').append( data );
rollLink();
}
});
Но я получаю сообщение об ошибке, когда rollLink() не определен. Пожалуйста, кто-нибудь может указать на ошибку в моих путях?
РЕДАКТИРОВАТЬ:
Ах, извините за недостаточную информацию. Я уточню:
functions.php
.Ниже приведен пример нижнего колонтитула, который выводится:
<script type='text/javascript' src='http://localhost/wordpress/wp-content/themes/mytheme/javascripts/script_a.js'></script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/plugins/myplugin/script_b.js'></script>
</body>
</html>
Это может быть связано с тем, что файл, который использует эту функцию, загружается перед файлом, определяющим эту функцию. Я столкнулся с той же проблемой, когда пытался загрузить файл изображения и показывая его на холсте, причина в том, что файл, который должен использоваться, слишком велик, что требуется много времени для загрузки, а другая загрузка файла перед этим файлом он говорит, что переменная не определена.
Вы можете сделать логическую переменную funcionReady и инициализировать ее как ложную и превратить ее значение true в определение функции и перед использованием этой функции проверить переменную, является ли она истиной или нет, если true, а затем выполнить else wait.
Возможно, попробуйте обернуть script_b.js
в $(document).ready
, например:
$(document).ready(function(){
$.ajax({
url: bla,
data: bla,
success:function(data) {
$('#hero').append( data );
rollLink();
}
});
}
Если размер страницы намного больше, чем на странице b, загрузка и выполнение займет больше времени. Хуже того, если вы разместите свою функцию на кнопке файла, тогда страница b будет готова, запустится и исполняется до того, как даже страница закончит загрузку. На всякий случай, попробуйте подтвердить, если rollLink(); это функция перед ее вызовом.
if(typeof rollLink === "function")
{
//true;
}
else{
//false;
}
если true, означает, что функция готова, в противном случае она не существует (пока). Легко исправить это вызов функции ajax с конца скрипта, где вы убедитесь, что все необходимые файлы загружены.
Неэффективным решением будет иметь рекурсивный вызов функции ajax, ожидающий загрузки rollLink.
if(typeof rollLink === "function")
{
//do ur work
}
else{
//call again after one sec;
setTimeout(function (){callSelfAjaxFunction();} , 1000);//every one sec
}
Поэтому, если вам нравится этот подход, вам может потребоваться передать счетчик в качестве параметра, увеличивающегося при каждом вызове, и заканчивается, когда превышено, так что у вас не будет функции, вызывающей его навсегда на сервере.
if(counter < 10 ){
setTimeout(function (){
callSelfAjaxFunction(counter++);
} , 1000);//every one sec
}
вы должны загрузить оба файла на своей странице и файл, в котором вы указали rollLink, перед загрузкой ajax. это все в основном случае.