2014-11-25 92 views
0

我不能爲我的生命明白爲什麼這是不工作...jQuery的鏈AJAX調用

function Register(email, password) { 

var data = { 
    Email: email, 
    Password: password, 
    ConfirmPassword: password 
}; 

return $.ajax({ 
    type: 'POST', 
    url: baseUrl + 'api/Account/Register', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data) 
}) 

} 

function Login(email, password) { 

var data = { 
    grant_type: 'password', 
    username: email, 
    password: password 
}; 

return $.ajax({ 
    type: 'POST', 
    url: baseUrl + 'Token', 
    data: data 
}).done(function (data) { 
    sessionStorage.setItem(tokenKey, data.access_token); 
}); 

} 

現在......我想在一個按鈕,點擊註冊,然後登錄...

var email = $('input[name="email"]').val(); 
var password = $('input[name="password"]').val(); 

Register(email, password).then(Login(email, password)) 

但是,該代碼不會按順序調用它們。它通常首先登錄。

我自己也嘗試做過()和()的時候,但我真的不理解的差異,也許需要一些幫助...

+0

我相信你需要添加異步:假到您的ajax調用。但我不會這樣做。它會持續下去,直到ajax完成運行。我會把登錄放入你的ajax調用的成功函數中。 – 2014-11-25 01:13:01

回答

1

我認爲問題是,它會立即評估Login(email, password)

嘗試: Register(email, password).then(function() { Login(email, password); });

+0

謝謝,這工作...我討厭javascript ...任何洞悉你爲什麼需要額外的包裝功能? – hatcyl 2014-11-25 01:25:41

+1

你調用它的方式,它首先調用'Register',然後調用'Login',因爲它將'Login'函數返回的值傳遞給'.then()'。通過添加包裝器,'Login'函數不會被執行,直到'Register'返回的延遲解決。 – rdubya 2014-11-25 01:28:31

+0

@hatcyl - JavaScript在這方面與大多數語言沒有區別。如果你將'Login(xxx)'作爲參數傳遞給一個函數或方法,它將立即以我所知道的所有語言被調用。這不僅僅是一個Javascript的東西。傳遞一個函數引用(以便稍後可以調用它)與現在調用一個函數並傳遞其返回結果的語法不同。你所做的只是一個常見的編程錯誤,而不是Javascript獨有的東西。 – jfriend00 2014-11-25 05:11:17

1
function Register(email, password) { 

    var data = { 
     Email: email, 
     Password: password, 
     ConfirmPassword: password 
    }; 

    return $.ajax({ 
     type: 'POST', 
     url: baseUrl + 'api/Account/Register', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(data), 
     success: function(msg) { 
      Login(email, password); 
     } 
    }) 

} 
+0

謝謝,雖然這會起作用,但當你需要將許多功能鏈接在一起時,它會很快變得醜陋,有時甚至是有條件的。我試圖用它「承諾」的方式......但我是一個大白菜。 – hatcyl 2014-11-25 01:26:44