2016-05-06 130 views
-1

我有一個註冊表單,用於檢查用戶名是否已存在並顯示BS警報。檢查此功能的功能使用Ajax。我早期問題的答案讓我改進了我的代碼,以在我的Ajax函數中使用回調。所以,現在我有以下代碼:虛假值被忽略

HTML:

onchange="callAjax('gebruikersnaam', document.getElementById('gebruikersnaam').value, checkBestaandeGebruikersnaam)" 

JavaScript的主要功能:

function callAjax(arg1, arg2, callback){ 
var request = new XMLHttpRequest(); 

request.onreadystatechange = function() { 
    if(request.readyState === 4 && request.status === 200) { 
     callback(request.responseText); 
    } else { 
     document.getElementById("message").innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText; 
    } 
    } 
request.open("POST", "core/functions/checkBestaandeGebruikersnaam.php", true); 
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
request.send(arg1+"="+arg2);  
} 

JavaScript回調函數:

function checkBestaandeGebruikersnaam(result) { 
if(result == "1") { 
    document.getElementById("message").innerHTML = '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Die gebruikersnaam is al bezet, kies een andere gebruikersnaam.</div>'; 
    return false; 
} 
else { 
    document.getElementById("message").innerHTML = ''; 
} 
} 

現在我有一個通用的Ajax請求我可以通過給它提供不同的參數來重新使用它。所以謝謝你。有人可以確認我是否正確使用回調功能?

現在,我真正想要的是在提交表單時重新使用函數checkBestaandeGebruikersnaam()。我有以下代碼:

HTML:

<form action="register.php" onsubmit="return validate()" name="registerForm" method="post" class="col-md-10 col-md-offset-1 col-xs-12 col-xs-offset-0"> 

的JavaScript:

function validate() { 
var errMsgHolder = document.getElementById("message"); 
if(checkPassword() === false) { 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Kies een wachtwoord van minimaal 3 en maximaal 30 tekens.</div>'; 
      return false; 
} else if(checkPasswordsMatch() === false){ 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Wachtwoorden komen niet overeen.</div>'; 
      return false; 
} else if(checkBestaandeGebruikersnaam() === false){ 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Die gebruikersnaam is al bezet, kies een andere gebruikersnaam.</div>'; 
      return false; 
} 

功能checkPassword()checkPasswordsMatch()不使用Ajax和他們的工作職能validate()內如預期。但是,當我測試功能validate()它不起作用。它會忽略false值並提交表單。我認爲使用回調函數應該可以解決這個問題,但顯然我仍然在做錯事。請賜教,謝謝你的時間。

+0

閱讀此開始:http://www.sitepoint.com/javascript-truthy-falsy/;) –

回答

1

我們來評估什麼一步一步發生的事情:

validate()函數調用checkBestaandeGebruikersnaam()不傳遞任何參數。

checkBestaandeGebruikersnaam()裏面,result的值是未定義的,else塊被執行,不返回任何東西。

validate()支票checkBestaandeGebruikersnaam() === false評估爲false

由於validate()不返回false,這使得javascript提交表單。

+0

理解,謝謝你的非常明確的答案。 –

0

發佈我的解決方案,也許它會幫助其他新手。

我決定通過變量checkBG來評估validate(),它應該從checkBestaandeGebruikersnaam()中的'result'得到它的值。但由於checkBG應提供的其他功能,我做了一個全局變量通過不使用var關鍵字,像這樣:

function checkBestaandeGebruikersnaam(result) { 
checkBG = result; 
if(checkBG == "1") { 
    document.getElementById("message").innerHTML = '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Die gebruikersnaam is al bezet, kies een andere gebruikersnaam.</div>'; 
} 
else { 
    document.getElementById("message").innerHTML = ''; 
} 
} 

然後我用這個變量checkBG在我validate()功能的條件:

function validate() { 
var errMsgHolder = document.getElementById("message"); 
if(checkPassword() === false) { 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Kies een wachtwoord van minimaal 3 en maximaal 30 tekens.</div>'; 
      return false; 
} else if(checkPasswordsMatch() === false){ 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Wachtwoorden komen niet overeen.</div>'; 
      return false; 
} else if(checkBG == "1"){ 
    errMsgHolder.innerHTML = 
      '<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><strong>Let op!</strong> Die gebruikersnaam is al bezet, kies een andere gebruikersnaam.</div>'; 
      return false; 
} 
} 

這實際上工作和幾個小時的酷刑終於導致了勝利!再次感謝在我的路上幫助我的Kashif。