简单的功能没有被定义。看不到任何语法错误

时间:2014-03-06 19:50:13

标签: javascript jquery

我通过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>

3 个答案:

答案 0 :(得分:0)

你应该把sendlogin()函数放在document.ready()之外。然后,您可以从$(document).ready

调用它

答案 1 :(得分:0)

您已在sendLogin()中定义了document.ready,它已成为范围,无法从全局范围调用。定义sendLogindocument.ready,当您从popLogCreds调用sendLogin时,您应该popLogCreds定义文档的一侧。已经按照@Quentin的指示< / p>

答案 2 :(得分:0)

您已使用另一个函数内部的函数声明(您传递给ready()作为参数的匿名函数)定义了它。函数声明是本地范围的,因此它不是全局的。

只有在全局范围内,才能从控制台调用它。

您可以使用以下命令将其复制到全局范围:

window.sendLogin = sendLogin;

或者,将它(以及它所调用的任何函数也是本地范围的,以此类推)移动到全局范围(即在所有其他函数之外)。