コールバック関数の戻り値が大域変数に与える割り当て問題
2210 ワード
今日は問題が発生しました.jsでは、コールバック関数の戻り値はグローバル変数に対して割り当てられています.ネット上の解決策は主に非同期のasync:falseに変更されています.記憶力は悪いペン先に及ばないです.
ソースコードは以下の通りです
$('#loginSubmit').click(function(){
var useremail = $("#login_email").val();
var password = $("#login_password").val();
var emailHash = HASH.md5(useremail);
var newPsd = 0;
AUTH.fnPreLogin(emailHash,function(json){
console.log("success, token = " + json.data.pre_login_token);
newPsd = HASH.md5(HASH.md5(password)+json.data.pre_login_token);
console.log("newPSD: " + newPsd);
idcode = json.data.pre_login_token;
console.log("idcode: "+idcode);
});
AUTH.fnLogin(emailHash,newPsd,idcode,function(json){
console.log("success, token = " + json.data.token);
});
});
エラーfnLoginはnewPsdを呼び出した時、newPsdはコールバック関数に値を割り当てられませんでした.その中のfnProLoginとfnLoginの定義は以下の通りです.function fnPreLogin(email,callback){
console.log("fnPreLogin");
var myDate = new Date();
var preData = {
email: email,
time:myDate.toLocaleTimeString()
};
$.get(url_preLogin, preData, callback);
}
function fnLogin(email,psd,code,callback){
console.log("fnLogin");
var myDate = new Date();
var data = {
email: email,
password: psd,
idcode: code,
time:myDate.toLocaleTimeString()
};
$.get(url_login, data, callback);
}
fnProLogin()で非同期async:falseに変更し、ajax方法で実現すれば、次のように変更できます. function fnPreLogin(email,callback){
console.log("fnPreLogin");
var myDate = new Date();
var preData = {
email: email,
time:myDate.toLocaleTimeString()
};
$.ajax({
url: url_preLogin,
async: false,
type: "GET",
data: preData,
success: callback
});
}