我正在'结束一天的脑屁'&无法让这段简单的代码工作。我想要做的就是在我正在使用的另一个脚本中重用一个函数。
例如,在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()未定义。请问有人可以用我的方式指出错误吗?
编辑:
抱歉信息不足啊。我将详细说明:
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>
答案 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的文件。这一切都是基本情况。