Javascript 未定义简单函数。没有看到任何语法错误

Javascript 未定义简单函数。没有看到任何语法错误,javascript,jquery,Javascript,Jquery,我已经通过JS lint运行了这个脚本。。。当我尝试执行sendLogin时,控制台返回尚未定义的消息。为什么? <script> $(document).ready(function(){ $('#register-fields').hide(); function reCenter(){ $('.login-window').center($('.wrapper')); } $('.login-window').center($

我已经通过JS lint运行了这个脚本。。。当我尝试执行sendLogin时,控制台返回尚未定义的消息。为什么?

<script>
$(document).ready(function(){
    $('#register-fields').hide();

    function reCenter(){
        $('.login-window').center($('.wrapper'));
    }

    $('.login-window').center($('.wrapper'));

    $(window).resize(reCenter);

    var creds = new Object();

    function popLogCreds(creds){
        creds.username = $("#username-field").val();
        creds.password = $("#password-field").val();
    }

    function sendLogin(){

        popLogCreds();

        var loginCredentials= {
        "username":creds.username,
        "password":creds.password };

        request = $.ajax({
            url: "http://127.0.0.1:8080/login",
            type: "POST",
            crossDomain: true,
            data: loginCredentials,
            dataType: "json"
        });

        request.always(function(data) {

            console.log(data); 

            var ParsedData = jQuery.parseJSON(data);

            sessionStorage.username=ParsedData.username;
            sessionStorage.password=ParsedData.password;
            sessionStorage.fname=ParsedData.fname;
            sessionStorage.lname=ParsedData.lname;
            sessionStorage.rank=ParsedData.rank;

        });

    }


});
</script>

您应该将sendlogin函数置于document.ready之外。然后,您可以从$document.ready调用它。

您已经在document.ready中定义了sendLogin,它成为it范围,无法从全局范围调用。在document.ready外部定义sendLogin,当您从sendLogin调用popLogCreds时,您应该在document.ready外部定义popLogCreds,正如@Quentin所指出的那样,您已经在另一个函数中使用函数声明定义了它,匿名声明作为参数传递给ready。函数声明的作用域是局部的,因此它不是全局的

从控制台调用它只有在它是全局的情况下才有效

您可以通过以下方式将其复制到全局范围:

window.sendLogin = sendLogin;

或者,将它和它调用的任何也在本地范围内的函数向下移动到全局范围,即在所有其他函数之外。

如果您尝试在$document.ready范围之外调用该函数,它将不可用。你可以尝试给它命名,或者在这个范围内进行函数调用。谢谢。如果您在传递给ready的函数之外定义它,并且没有做任何其他更改,那么它仍然会失败,因为它调用的popLogCreds也是本地范围的。谢谢!从未意识到这一点。@jt0dd很高兴帮助Brothern,它将立即失败,因为它调用popLogCreds,而popLogCreds也是本地范围的。啊哈,那我就必须移动它们两个。我应该改变我的做法,在一个单独的functions.js文件中定义所有全局函数@昆汀+1作为最后的提醒。我打算把整个东西搬走。