【发布时间】:2018-07-17 11:30:01
【问题描述】:
我目前正在学习callbacks,但我不确定下面的使用方式,尤其是涉及parameter- passing
回调showSuccessMessage 和showErrorMessage 到signupUser 完全optimal?当您可以 general versus concrete 方式 name 回调/参数时,我也感到困惑?
如果我的代码不正确,您能否优化我的代码并解释一下,好吗?
// GLOBAL ARRAY for storing any DATA from the SERVER
var ajDataFromServer = [];
// Main ajax function using callback for posting data to the server
function postAjax( sUrl , frmData, callback ){
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var ajDataFromServer = JSON.parse(this.responseText);
callback( ajDataFromServer, showSuccessMessage, showErrorMessage );
}
}
ajax.open( "POST", sUrl , true );
var jFrm = new FormData( frmData );
ajax.send( jFrm )
}
/************************************************************************/
/************************************************************************/
/************************************************************************/
// DO the SIGNUP, POST data to the SERVER with AJAX
btnSignupForm.addEventListener("click", function (e) {
postAjax( "api_signup_users.php", frmSignup, signupUser );
});
function signupUser( ajUserDataFromServer, showSuccessMessage, showErrorMessage ) {
if ( ajUserDataFromServer.status == "ok" ) {
//console.log( "SIGNUP SUCCESFULL" );
pageLogin.style.display = "flex";
pageSignup.style.display = "none";
showSuccessMessage( "Account succesfully created - Signup please" );
} else {
//console.log( "SIGNUP FAIL - TRY AGAIN" );
pageViewProducts.style.display = "none";
pageLogin.style.display = "none";
pageSignup.style.display = "flex";
showErrorMessage( "Signup Failed - Try again" );
}
}
/************************************************************************/
/************************************************************************/
/************************************************************************/
function showSuccessMessage ( sSuccessMessage ) {
var alblMessages = document.getElementsByClassName( "lblMessage" );
for ( var i = 0; i < alblMessages.length; i++ ) {
alblMessages[i].innerHTML = sSuccessMessage.fontcolor("#549839");
}
}
/************************************************************************/
/************************************************************************/
/************************************************************************/
function showErrorMessage (sErrorMessage) {
var alblMessages = document.getElementsByClassName( "lblMessage" );
for ( var i = 0; i < alblMessages.length; i++ ) {
alblMessages[i].innerHTML = sErrorMessage.fontcolor("red");
}
}
【问题讨论】:
标签: javascript callback parameter-passing