繁体   English   中英

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

[英]calling js function in another .js file

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

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

success: searchResults

不像这样:

success: searchResults()

当您将括号放在其后时,它将指示JS解释器立即调用它。 如果您不将括号放在后面,则它是一个函数引用,以后任何有引用的人都可以调用。


此外, searchResults()函数是在document.ready处理程序内部本地定义的,并且在该函数之外不可用(它对于您的ready回调是本地的)。 如果希望它在全局范围内可用,以便可以从另一个上下文中调用它,则必须在全局范围内进行定义。

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

您的代码有两个问题:

  1. 在page2.js中,仅在DOM准备好后定义函数searchResults 但是,这不适用于page1.js中的ajax调用。 这就是为什么当page1查找searchResults时找不到它。 同样,将ajax调用也包装在$(document).ready()中,或者从$(document).ready()中都删除。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM