Ссылка на функцию JavaScript внутри другого скрипта

0

У меня есть "конечный день", и я не могу заставить этот простой кусок кода работать. Все, что я хочу сделать, это повторное использование функции в другом скрипте, который я использую.

Например, в 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() не определен. Пожалуйста, кто-нибудь может указать на ошибку в моих путях?

РЕДАКТИРОВАТЬ:

Ах, извините за недостаточную информацию. Я уточню:

  • Сценарий A - это мой основной файл JS. Он запускается на каждой странице моей темы WP и помещается в файл functions.php.
  • Script B находится внутри плагина WP, который я создаю.

Ниже приведен пример нижнего колонтитула, который выводится:

<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>
  • 0
    Это недостаточно информации. Пожалуйста, покажите нам, как вы загружаете эти два скрипта.
  • 0
    это зависит от того, в каком порядке загружаются скрипты и как выполняется код.
Показать ещё 7 комментариев
Теги:
function
wordpress-plugin

4 ответа

0

Это может быть связано с тем, что файл, который использует эту функцию, загружается перед файлом, определяющим эту функцию. Я столкнулся с той же проблемой, когда пытался загрузить файл изображения и показывая его на холсте, причина в том, что файл, который должен использоваться, слишком велик, что требуется много времени для загрузки, а другая загрузка файла перед этим файлом он говорит, что переменная не определена.

Решение:

Вы можете сделать логическую переменную funcionReady и инициализировать ее как ложную и превратить ее значение true в определение функции и перед использованием этой функции проверить переменную, является ли она истиной или нет, если true, а затем выполнить else wait.

0

Возможно, попробуйте обернуть script_b.js в $(document).ready, например:

$(document).ready(function(){
    $.ajax({
        url: bla,
        data: bla,
        success:function(data) {
            $('#hero').append( data );
            rollLink();
        }
    });
}
0

Если размер страницы намного больше, чем на странице 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
  }
-3

вы должны загрузить оба файла на своей странице и файл, в котором вы указали rollLink, перед загрузкой ajax. это все в основном случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню