Ajax成功函数在java类响应之前触发

时间:2012-12-12 22:35:37

标签: javascript jquery ajax twitter-bootstrap

我正在使用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') };
}

2 个答案:

答案 0 :(得分:0)

您需要将您的成功包装在一个匿名函数中,以便它在AJAX调用的范围内执行,而不是内联(立即)执行:

success: function() { successLogin(data) }

答案 1 :(得分:0)

success: successLogin(data)

函数调用和函数定义之间存在差异:

  • 功能定义使用function关键字并包含功能正文{...}
  • 函数调用将括号(参数列表)附加到函数名称并实际调用函数以返回值

如果为属性分配函数调用,它将返回一个值,该值将存储。为了避免这种情况,如果你的函数不使用任何参数你可以使用函数名,或者你的函数确实接受了一个参数,将函数调用嵌入到另一个函数的定义中:

  • 无参数:success: successLogin
  • 有参数:success: function() { successLogin(data); }