Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[ajax] readyState heeft rare waardes.

Pagina: 1
Acties:

  • achtbaanfreak
  • Registratie: Oktober 2006
  • Laatst online: 06-12-2024
[edit]
Het lag aan de xmlhttprequest debugger van Greasemonkey.
[/edit]

Ik was zo bezig met mijn eerste eigen ajax functie. Het moest gewoon een normaal inlog script worden, en het werkt opzich heel redelijk, alleen werkt het niet 100%. Ik heb namelijk het probleem dat de readyState eerst 2 keer de waarde 1 krijgt, daarna 2 keer de waarde 2 vervolgens 3 en daarna

2 keer 4, wat volgens mij niet mag voorkomen. En omdat hij 2 keer de waarde 4 krijgt, wordt de functie die het resultaat verder verwerkt 2 keer aangeroepen.

Mijn vraag is dus, hoe kan ik voorkomen dat de readyState 2 keer 4 word?

De volgende dingen ben ik zeker van:
- serverside werkt alles goed.
- gebruik goede gegevens.

hier staat het online, inloggegevens zijn gewoon ajax en ajax

let trouwens niet op de rare variabel namen, had wat nodig even snel wat nodig, dus had maar wat gedaan.

edit
Ook als ik de pagina die aangeroepen word verwijder (status = 404) blijft hij deze rare waardes geven.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">
var xmlhttp
var geebruikersnaam
var wachtwoord
function XMLHttprequest(){
    if(window.ActiveXObject){
        xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }
}

function login(){
    var text = document.createTextNode("Even geduld, je word ingelogd");
    var logindiv = document.getElementById("LoginDiv");
    gebruikersnaam = document.getElementById("gebruikersnaam").value;
    wachtwoord = document.getElementById("wachtwoord").value;
    while(logindiv.childNodes.length > 0){
        logindiv.removeChild(logindiv.childNodes[0]);
    }
    logindiv.appendChild(text);

    zendverzoek();
}

function createQueryString(gebruikersnaam, wachtwoord){
    var querystring = "gebruikersnaam=" + gebruikersnaam + "&wachtwoord=" + wachtwoord + "&date=" + new Date().getTime();
    return querystring; 
}

function zendverzoek(){
    
    XMLHttprequest();
    var querystring = createQueryString(gebruikersnaam, wachtwoord);
    
    xmlhttp.onreadystatechange = callback;
    xmlhttp.open("POST", "login.php", true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
    xmlhttp.send(querystring);
}

function callback(){
alert(xmlhttp.readyState);
    if(xmlhttp.readyState == 4){
        
        if(xmlhttp.status == 200){
            
            inloggen();
            
        }else{

            createForm("Er is geen goede verbinding met de server opgezet, probeer het opnieuw.");
            
        }
    }
}

function createForm(text){
    
    var text = document.createTextNode(text);
    var logindiv = document.getElementById("LoginDiv");
    
    while(logindiv.childNodes.length > 0){
        logindiv.removeChild(logindiv.childNodes[0]);
    }
    
    var form = document.createElement("form");
    form.setAttribute("action", "#");
            
    var text1 = document.createTextNode("gebruikersnaam: ");
        
    var input1 = document.createElement("input");
    input1.setAttribute("type", "text");
    input1.setAttribute("name", "gebruikersnaam");
    input1.setAttribute("id", "gebruikersnaam");
    
    var br1 = document.createElement("br");
    var br2 = document.createElement("br");
            
    var text2 = document.createTextNode("wachtwoord: ");
            
    var input2 = document.createElement("input");
    input2.setAttribute("type", "text");
    input2.setAttribute("name", "wachtwoord");
    input2.setAttribute("id", "wachtwoord");
    
    var input3 = document.createElement("input");
    input3.setAttribute("type", "button");
    input3.setAttribute("onclick", "login();");
    input3.setAttribute("value", "login");
            
    form.appendChild(text1);
    form.appendChild(input1);
    form.appendChild(br1);
    form.appendChild(text2);
    form.appendChild(input2);
    form.appendChild(br2);
    form.appendChild(input3);
    
    logindiv.appendChild(text);
    logindiv.appendChild(form);
    
}

function inloggen(){
    
    var xmldoc = xmlhttp.responseXML;
    var root = xmldoc.firstChild;
    var gelukt = root.firstChild;
    var gelukt2 = gelukt.firstChild.nodeValue;
    
    var text

    if(gelukt2 == 1){
        //text = "Je bent succesvol ingelogd.";
        //var logindiv = document.getElementById("LoginDiv");
        //logindiv.innerHTML = text;
//als het inloggen goed ziet, zie je dit nu dus niet aan een nieuw bericht, maar kan dit zien
//doordat de tekst even geduld u word ingelogt blijft staan (heb dit uitgeschakeld om te kijken
//of het mss door innerHTML komt, dat het fout gaat)
    }else{
        text = "de combinatie van gebruikersnaam en wachtwoord klopt niet.";
        createForm(text);
    }
}


</script>
</head>
<body>
<div id="LoginDiv">
<form action="#">
gebruikersnaam: <input type="text" name="gebruikersnaam" id="gebruikersnaam"/><br/>
wachtwoord: <input type="password" name="wachtwoord" id="wachtwoord" /><br/>
<input type="button" value="inloggen" onclick="login();" />
</form>
</div>

</body>
</html>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

$username = "****";
$password = "****";
$host = "****";
$dbnaam = "****";
$db = mysql_connect($host, $username, $password) or die(mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());

header("Cache-Control: no-cache, must-relalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-type: text/xml");

$gebruikersnaam = $_POST["gebruikersnaam"];
$wachtwoord = $_POST["wachtwoord"];
$query = "SELECT count(*) a FROM members WHERE gebruikersnaam = '".$gebruikersnaam."' AND wachtwoord = '".$wachtwoord."';";
$result = mysql_query($query, $db) or die(mysql_error());
$rij = mysql_fetch_array($result);
$rij = $rij["a"];
settype($rij, "int");
if($rij == 1){
    echo("<login><gelukt>1</gelukt></login>");
}else{
    echo("<login><gelukt>0</gelukt></login>");
}

mysql_close($db);

?>

[ Voor 4% gewijzigd door achtbaanfreak op 29-08-2007 19:53 ]


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Maakt het verschil als je regel 40 en 41 omdraait?
Dus onreadystatechange = callback en open().

Fat Pizza's pizza, they are big and they are cheezy


  • achtbaanfreak
  • Registratie: Oktober 2006
  • Laatst online: 06-12-2024
JKVA schreef op woensdag 29 augustus 2007 @ 19:22:
Maakt het verschil als je regel 40 en 41 omdraait?
Dus onreadystatechange = callback en open().
Ja, dat maakt verschil, readyState krijgt dan de volgende waarden: 1, 2, 2, 3, 4, 4

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

offtopic:
var geebruikersnaam ???

Het maakt overigens niets uit in dit voorbeeld, maar goed...


In Firefox krijg ik gewoon nette alerts te zien, ofwel 1, 2, 3 en 4. Geen dubbele waarden te zien. In IE ook niet trouwens

[ Voor 15% gewijzigd door JKVA op 29-08-2007 19:43 ]

Fat Pizza's pizza, they are big and they are cheezy


  • achtbaanfreak
  • Registratie: Oktober 2006
  • Laatst online: 06-12-2024
JKVA schreef op woensdag 29 augustus 2007 @ 19:42:
offtopic:
var geebruikersnaam ???

Het maakt overigens niets uit in dit voorbeeld, maar goed...


In Firefox krijg ik gewoon nette alerts te zien, ofwel 1, 2, 3 en 4. Geen dubbele waarden te zien. In IE ook niet trouwens
var geebruikersnaam = typ0

stom van me dat ik het niet even in IE heb geprobeerd, daar heb ik ook gewoon normale waardes ja! Dus het probleem ligt bij mijn firefox.

Bedankt voor de reacties.

edit
Het lag aan de xmlhttprequest debugger van Greasemonkey.

[ Voor 6% gewijzigd door achtbaanfreak op 29-08-2007 19:50 ]


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

achtbaanfreak schreef op woensdag 29 augustus 2007 @ 19:49:
[...]


var geebruikersnaam = typ0

stom van me dat ik het niet even in IE heb geprobeerd, daar heb ik ook gewoon normale waardes ja! Dus het probleem ligt bij mijn firefox.

Bedankt voor de reacties.

edit
Het lag aan de xmlhttprequest debugger van Greasemonkey.
Als je wilt debuggen, kijk eens naar Firebug. Ik gebruik niet anders, behalve de outlining functies van de web developer toolbar.

Fat Pizza's pizza, they are big and they are cheezy


  • achtbaanfreak
  • Registratie: Oktober 2006
  • Laatst online: 06-12-2024
JKVA schreef op woensdag 29 augustus 2007 @ 19:59:
[...]

Als je wilt debuggen, kijk eens naar Firebug. Ik gebruik niet anders, behalve de outlining functies van de web developer toolbar.
Geïnstaleerd, en voor zover ik even heb gekeken, werkt hij erg fijn.
Pagina: 1