JS elende...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eris -

Eris -

26/06/2006 15:04:00
Quote Anchor link
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"/>';
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?
 
PHP hulp

PHP hulp

26/11/2020 10:43:27
 
Legolas

Legolas

26/06/2006 15:10:00
Quote Anchor link
die r komt uit het niets, bestaat helemaal niet in validate2() (return)
 
Eris -

Eris -

26/06/2006 15:47:00
Quote Anchor link
r = 1;

en

r = 2;

Het rare is dat het goed gaat bij een regel omhoog...
 
Eris -

Eris -

26/06/2006 16:00:00
Quote Anchor link
Ben even verder klooien...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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);
}


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 -
 
Jelmer -

Jelmer -

26/06/2006 16:07:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
     }

  }

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.
 
Eris -

Eris -

26/06/2006 16:09:00
Quote Anchor link
Oke jammer daar gaat mijn gouden idee... Dan maar gewoon weer met een PHP refresh...
 
Jelmer -

Jelmer -

26/06/2006 16:30:00
Quote Anchor link
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.
 
Eris -

Eris -

26/06/2006 16:32:00
Quote Anchor link
Hij checkt nu sowiso alle velden afzonderlijk maar wil nog voor het verzenden kijken of er een of meerdere velden vergeten / niet voldoende zijn..
 
Jelmer -

Jelmer -

26/06/2006 16:37:00
Quote Anchor link
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?
 
Eris -

Eris -

26/06/2006 16:59:00
Quote Anchor link
Ik vraag me af of het zo veel energie gaat kosten.. Het is niets meer dan 1 hit en dat was het geen lastige mysql berekening...

Als je het in een keer wilt gaat checken moet je toch een manier hebben om alle gegevens te gelijk te gaan versturen...
 
Legolas

Legolas

26/06/2006 17:53:00
Quote Anchor link
en de load voor de client?
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)
 
Eris -

Eris -

26/06/2006 18:01:00
Quote Anchor link
Stelt niets voor teminste mijn PC had er geen last van...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.