在另一个.js文件中调用js函数

时间:2013-12-04 06:04:12

标签: javascript jquery ajax

在我的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未定义”

3 个答案:

答案 0 :(得分:1)

当您将函数作为成功处理程序传递时,需要像下面这样指定:

success: searchResults

不喜欢这样:

success: searchResults()

当你把parens放在它后面时,它会指示JS解释器现在调用它。当你没有将parens放在它后面时,它是一个函数引用,以后可以由任何有参考的人调用。


此外,searchResults()函数在document.ready处理程序的本地内部定义,并且在该函数之外不可用(它在您的就绪回调本地)。如果您希望全局可用,以便可以从其他上下文中调用它,则必须全局定义它。

答案 1 :(得分:1)

这是因为您已将函数定义放在文档中。把它放在外面后试试。

答案 2 :(得分:-1)

您的代码存在两个问题:

  1. 在page2.js中,函数searchResults仅在DOM准备好后定义。但这同样适用于page1.js中的ajax调用。这就是为什么,当page1查找searchResults时,它找不到它。也可以在$(document).ready()中填写ajax电话,或者从$(document).ready()中移除这两个电话。

  2. 当您执行success: searchResults()时,会对searchResults进行评估,并将其返回值分配给success,这不是您想要的。改为success: searchResults(不带括号)。