在我的AJAX帖子的成功回调函数中,我试图调用另一个JS文件中的函数
page1.html包含:
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="js/page2.js" type="text/javascript"></script>
<script>
$.ajax({
type: 'post',
url: '/dev/new/scripts/search.php',
dataType: 'json',
data: {"search_1":"<?php echo $item1; ?>","search_2":"<?php echo $item2; ?>"},
success: searchResults()
});
</script>
</head>
$.ajax({
type: 'post',
url: '/dev/new/scripts/search.php',
dataType: 'json',
data: {"search_1":"<?php echo $item1; ?>","search_2":"<?php echo $item2; ?>"},
success: searchResults()
});
page2.js包含:
$(document).ready(function() {
function searchResults () {
stuff...
}
});
firebug给出的错误是:“ReferenceError:searchResults未定义”
答案 0 :(得分:1)
当您将函数作为成功处理程序传递时,需要像下面这样指定:
success: searchResults
不喜欢这样:
success: searchResults()
当你把parens放在它后面时,它会指示JS解释器现在调用它。当你没有将parens放在它后面时,它是一个函数引用,以后可以由任何有参考的人调用。
此外,searchResults()
函数在document.ready处理程序的本地内部定义,并且在该函数之外不可用(它在您的就绪回调本地)。如果您希望全局可用,以便可以从其他上下文中调用它,则必须全局定义它。
答案 1 :(得分:1)
这是因为您已将函数定义放在文档中。把它放在外面后试试。
答案 2 :(得分:-1)
您的代码存在两个问题:
在page2.js中,函数searchResults
仅在DOM准备好后定义。但这同样适用于page1.js中的ajax调用。这就是为什么,当page1查找searchResults
时,它找不到它。也可以在$(document).ready()
中填写ajax电话,或者从$(document).ready()
中移除这两个电话。
当您执行success: searchResults()
时,会对searchResults
进行评估,并将其返回值分配给success
,这不是您想要的。改为success: searchResults
(不带括号)。