JS elende...
var vars = document.getElementById(field).value;
//alert(vars);
if(field2 == null || field2 == ''){
var com = 'test.php?mode='+mode+'&var='+vars;
}else{
var com = 'test.php?mode=repeat&var='+vars+'&var2='+ document.getElementById(field2).value;
}
xmlhttp.open('GET',com ,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.responseText == 1){
//maak achtergond groen
document.getElementById(field+'_img').innerHTML= '<img src="pass.gif" alt="help" width="14" height="14"/>';
r = 1;
}else{
//helaas we hebben een error
document.getElementById(field+'_img').innerHTML= '<img src="fail.gif" alt="help" width="14" height="14" onmouseover="domTT_activate(this, event, \'content\', xmlhttp.responseText, \'trail\', true, \'delay\', 0);"/>';
//geen error block weer
r = 2;
}
}
}
xmlhttp.send(null);
return r;
}
Error: r is not defined
Source File: http://www.onlinegastenboek.nl/new/ajax.js
Line: 80
Ik kom er niet achter wat ik fout doe..
De JS code past wel het "formulier aan zoals ik wens alleen hij geeft geen variable / waarde terug voor verder validatie van het formulier... Wat doe ik fout?
die r komt uit het niets, bestaat helemaal niet in validate2() (return)
en
r = 2;
Het rare is dat het goed gaat bij een regel omhoog...
Code (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
30
31
32
33
34
35
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
function validate2(field,mode,field2) {
var vars = document.getElementById(field).value;
//alert(vars);
if(field2 == null || field2 == ''){
var com = 'test.php?mode='+mode+'&var='+vars;
}else{
var com = 'test.php?mode=repeat&var='+vars+'&var2='+ document.getElementById(field2).value;
}
xmlhttp.open('GET',com ,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.responseText == 1){
//maak achtergond groen
document.getElementById(field+'_img').innerHTML= '<img src="pass.gif" alt="help" width="14" height="14"/>';
var r = '1';
return r;
}else{
//helaas we hebben een error
document.getElementById(field+'_img').innerHTML= '<img src="fail.gif" alt="help" width="14" height="14" onmouseover="domTT_activate(this, event, \'content\', xmlhttp.responseText, \'trail\', true, \'delay\', 0);"/>';
//geen error block weer
var r = '2';
return r;
}
}
}
xmlhttp.send(null);
}
//submit
function validate_all(){
//valideer alle velden
var allow = true;
var val1 = validate2('user','user');
alert(val1);
}
var vars = document.getElementById(field).value;
//alert(vars);
if(field2 == null || field2 == ''){
var com = 'test.php?mode='+mode+'&var='+vars;
}else{
var com = 'test.php?mode=repeat&var='+vars+'&var2='+ document.getElementById(field2).value;
}
xmlhttp.open('GET',com ,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.responseText == 1){
//maak achtergond groen
document.getElementById(field+'_img').innerHTML= '<img src="pass.gif" alt="help" width="14" height="14"/>';
var r = '1';
return r;
}else{
//helaas we hebben een error
document.getElementById(field+'_img').innerHTML= '<img src="fail.gif" alt="help" width="14" height="14" onmouseover="domTT_activate(this, event, \'content\', xmlhttp.responseText, \'trail\', true, \'delay\', 0);"/>';
//geen error block weer
var r = '2';
return r;
}
}
}
xmlhttp.send(null);
}
//submit
function validate_all(){
//valideer alle velden
var allow = true;
var val1 = validate2('user','user');
alert(val1);
}
Als ik van
var r = '1';
return r;
var r = '1';
alert(r);
return r;
maak krijg ik een alert window met 1 en daarna nog een met undifiened...
Voorbeeld
http://www.onlinegastenboek.nl/new/
Gewijzigd op 01/01/1970 01:00:00 door Eris -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.responseText == 1){
//maak achtergond groen
document.getElementById(field+'_img').innerHTML= '<img src="pass.gif" alt="help" width="14" height="14"/>';
var r = '1';
return r;
}else{
//helaas we hebben een error
document.getElementById(field+'_img').innerHTML= '<img src="fail.gif" alt="help" width="14" height="14" onmouseover="domTT_activate(this, event, \'content\', xmlhttp.responseText, \'trail\', true, \'delay\', 0);"/>';
//geen error block weer
var r = '2';
return r;
}
}
if (xmlhttp.readyState==4) {
if(xmlhttp.responseText == 1){
//maak achtergond groen
document.getElementById(field+'_img').innerHTML= '<img src="pass.gif" alt="help" width="14" height="14"/>';
var r = '1';
return r;
}else{
//helaas we hebben een error
document.getElementById(field+'_img').innerHTML= '<img src="fail.gif" alt="help" width="14" height="14" onmouseover="domTT_activate(this, event, \'content\', xmlhttp.responseText, \'trail\', true, \'delay\', 0);"/>';
//geen error block weer
var r = '2';
return r;
}
}
Zie, je maakt een functie aan. Dat is de minder leuke kant van asynchroon, deze functie loopt niet meer gelijk of in de vorige validate2-functie.
Hoe je dit moet oplossen weet ik zo even niet, sajax (een of ander php-ajax framework) heeft er een oplossing voor weet ik, al weet ik zo niet hoe die werk.
Oke jammer daar gaat mijn gouden idee... Dan maar gewoon weer met een PHP refresh...
Eris:
Oke jammer daar gaat mijn gouden idee...
Sorry daarvoor.
Een andere oplossing is wel om met 1 functie alle velden te blokkeren tegen veranderingen, en de request uit te voren. Daarna, waneer er dus antwoord is gegeven, komt de 2e functie in beeld, die dan de velden weer unlockt (of wat het dan ook maar moet doen) Een aparte functie voor het verzoek en het antwoord dus.
Hij checkt nu sowiso alle velden afzonderlijk maar wil nog voor het verzenden kijken of er een of meerdere velden vergeten / niet voldoende zijn..
Dus voor ieder velt stuurt hij een vraag op? Gaat dat niet ontzettend veel server-energie kosten? Kan je niet beter alle velden in 1 keer controleren?
Als je het in een keer wilt gaat checken moet je toch een manier hebben om alle gegevens te gelijk te gaan versturen...
ik heb een variant van live search gemaakt, en dat wordt soms iets te veel voor firefox :P
(live search = zoeken tijdens het typen van zoekwoorden)
Stelt niets voor teminste mijn PC had er geen last van...