global namecheck is vòòr de alert undefined maar nà de alert wel gevuld...

Status
Niet open voor verdere reacties.

poashoas

Gebruiker
Lid geworden
31 mei 2008
Berichten
66
In de onderstaande code wordt gecheckt of de opgegeven gebruikersnaam al bestaat in de database. switch.php geeft de waarde "unallowed" terug als die al bestaat.
Op regel 43 wordt even een pauze ingelast om de ajax request uit te voeren.

Het gekke is alleen dat de alert op regel 56 zegt dat namecheck 'undefined' is en zodra ik op "ok" klik dan is die op regel 58 wel weer gedefinieerd, de if statement klopt dan ineens.
Als ik de alert op regel 56 weghaal klopt regel 58 niet meer. En als ik de pauze op regel 67 op 10 seconden zet blijft het undefined op regel 62.

Wat doet die alert nou voor iets magisch waardoor de global namecheck (regel 4) wel wordt gevuld?

PHP:
var xmlHttp;
var xmlHttpusernamecheck;

var namecheck;

function register(gebruikersnaam, pw, pw2, voornaam, achternaam)
{
	var username=gebruikersnaam;
	var password=pw;
	var password2=pw2;
	var firstname=voornaam;
	var lastname=achternaam;

	xmlHttp=GetXmlHttpObject()
	xmlHttpusernamecheck=GetXmlHttpObject()

	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request")
		return;
	}

	if(firstname==''){
		error_msg="error";
		alert("Voornaam is niet ingevuld.");
	}
		
	if(lastname==''){
		error_msg="error";
		alert("Achternaam is niet ingevuld.");
	}

	if(password!=password2 || password=="" || password2==""){
		error_msg="error";
		alert("Wachtwoorden komen niet overeen of zijn niet ingevuld.");  
	}

	if(username==''){
		error_msg="error";
		alert("Gebruikersnaam is niet ingevuld.");
	}else{
		usrid=username;
			
		var url="application/controller/switch.php?request=register"+
		"&action=usernamecheck"+
		"&gebruikersnaam=" + usrid +
		"&sid="+Math.random();
				
		xmlHttpusernamecheck.onreadystatechange=stateChangedusercheck
		xmlHttpusernamecheck.open("GET",url,true)
		xmlHttpusernamecheck.send(null)
	}

	pausecomp(3500);
		
	alert(namecheck);
	
	if(namecheck=='unallowed'){
		error_msg="error";
		alert("De gebruikersnaam is al in gebruik.");
	}else{
		alert(namecheck);//undefined
	}

}

function pausecomp(millis)
{
	var date = new Date();
	var curDate = null;

	do {
		 curDate = new Date(); 
	}

	while(curDate-date < millis);
} 

function stateChangedusercheck()
{
	if (xmlHttpusernamecheck.readyState==4 || xmlHttpusernamecheck.readyState=="complete"){
		namecheck=xmlHttpusernamecheck.responseText;
	}
}


function GetXmlHttpObject()
{
  var xmlHttp=null;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
  return xmlHttp;
}
 
Laatst bewerkt:
Hallo "poashoas",

Zou je je bericht willen aanpassen zodat het niet in een lijst zit.

Wanneer je je code tussen
PHP:
...
plaatst wordt het automatisch goed weergegeven :)
 
Hallo "poashoas",

Zou je je bericht willen aanpassen zodat het niet in een lijst zit.

Wanneer je je code tussen
PHP:
...
plaatst wordt het automatisch goed weergegeven :)

Hehe hanidg voor de volgende keer :p al mijn geknoei voor niks geweest
 
Ik zou zeggen dat het toeval is. Tijdens de alert werd stateChangedcheck() getriggered door het XmlHttpRequest object.

Het is niet de bedoeling dat je een http request maakt, een tijdje wacht en hoopt dat het klaar is. Je moet echt wachten tot het klaar is, je moet wachten tot de onreadystatechange handler wordt geroepen. Je moet dus al je code na "xmlHttpusernamecheck.send(null)" in de functie stateChangedusercheck() zetten. Dan hoef je natuurlijk ook niet meer je script te pauzeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan