我正在使用ajax创建一个登录函数,并且遇到成功函数(SuccessLogin)在获取ajax响应之前触发的问题。我正在从eclipse运行代码作为google web app,我可以看到在调试java类文件时,javascript在调试器捕获类文件中的断点之前,对类的成功响应发出警告。我现在只编写了几个月的代码,所以我确信这是我的一个愚蠢的小错误。
$(document).ready(function() {
sessionChecker()
// sign in
$('#signInForm').click(function () {
$().button('loading')
var email = $('#user_username').val();
sessionStorage.email = $('#user_username').val();
var password= $('#user_password').val();
var SignInRequest = {
type: "UserLoginRequest",
email: email,
password: password
}
var data= JSON.stringify(SignInRequest);
//disabled all the text fields
$('.text').attr('disabled','true');
//start the ajax
$.ajax({
url: "/resources/user/login",
type: "POST",
data: data,
cache: false,
success: successLogin(data)
});
});
//if submit button is clicked
$('#Register').click(function () {
$().button('loading')
var email = $('#email').val();
if ($('#InputPassword').val()== $('#ConfirmPassword').val()) {
var password= $('input[id=InputPassword]').val();
} else {alert("Passwords do not match");
return ;}
var UserRegistrationRequest = {
type: "UserRegistrationRequest",
email: email,
password: password
}
var data= JSON.stringify(UserRegistrationRequest);
//disabled all the text fields
$('.text').attr('disabled','true');
//start the ajax
$.ajax({
url: "/resources/user/register",
type: "POST",
data: data,
cache: false,
success: function (data) {
if (data.success==true) {
//hide the form
$('form').fadeOut('slow');
//show the success message
$('.done').fadeIn('slow');
} else alert('data.errorReason');
}
});
return false;
});
});
function successLogin (data){
if (data.success) {
sessionStorage.userID= data.userID
var userID = data.userID
sessionChecker(userID);
} else alert(data.errorReason);
}
//session check
function sessionChecker(uid) {
if (sessionStorage.userID!= null){
var userID = sessionStorage.userID
};
if (userID != null){
$('#user').append(userID)
$('#fat-menu_1').fadeOut('slow')
$('#fat-menu_2').append(sessionStorage.email).fadeIn('slow') };
}
答案 0 :(得分:0)
您需要将您的成功包装在一个匿名函数中,以便它在AJAX调用的范围内执行,而不是内联(立即)执行:
success: function() { successLogin(data) }
答案 1 :(得分:0)
success: successLogin(data)
函数调用和函数定义之间存在差异:
function
关键字并包含功能正文{...}
如果为属性分配函数调用,它将返回一个值,该值将存储。为了避免这种情况,如果你的函数不使用任何参数你可以使用函数名,或者你的函数确实接受了一个参数,将函数调用嵌入到另一个函数的定义中:
success: successLogin
success: function() { successLogin(data); }