在另一个脚本中引用javascript函数

时间:2013-11-11 18:29:21

标签: javascript jquery function wordpress-plugin

我正在'结束一天的脑屁'&无法让这段简单的代码工作。我想要做的就是在我正在使用的另一个脚本中重用一个函数。

例如,在javascript A中我有:

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文件排队。
  • 脚本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>

4 个答案:

答案 0 :(得分: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
  }

答案 1 :(得分:0)

或许尝试将script_b.js包裹在$(document).ready中,如下所示:

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

答案 2 :(得分:0)

这可能是因为在定义该函数的文件之前加载了使用该函数的文件。当我试图加载图像文件并在画布上显示它时,我遇到了同样的问题,原因是要使用的文件太大,以至于需要花费很多时间来加载,而另一个文件在该文件之前加载它说变量没有定义。

解决方案:

你可以做的是创建一个布尔变量funcionReady并将其初始化为false并在函数定义中将其值为true,并在使用该函数之前检查变量是否为真如果为真则执行其他等待。

答案 3 :(得分:-3)

您应该在页面和文件中加载两个文件,您必须在ajax调用之前加载定义rollLink的文件。这一切都是基本情况。