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