ajax
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var info;
function sendRequest(value, soort){
http.open('GET', 'getinfo.php?' + soort + '=' + value);
http.onreadystatechange = handleResponseText;
http.send(null);
}
function handleResponseText(){
if(http.readyState == 4 && http.status == 200){
if(http.responseText){
info = http.responseText;
}
}
}
function send(waarde, soort){
sendRequest(waarde, soort);
return info;
}
function sendRequest(value, soort){
http.open('GET', 'getinfo.php?' + soort + '=' + value);
http.onreadystatechange = handleResponseText;
http.send(null);
}
function handleResponseText(){
if(http.readyState == 4 && http.status == 200){
if(http.responseText){
info = http.responseText;
}
}
}
function send(waarde, soort){
sendRequest(waarde, soort);
return info;
}
het probleem is dat de var info al gereturnd wordt terwijl die nog geen waarde heeft gekregen. Roep ik daarna nog een keer de functie send() aan dan doet die het wel. Iemand die een oplossing weet?
Ik schop hem nog een keer want volgens mij weet Jelmer hier veel meer vanaf :)
Hemel of hel?
Bedenk nadat je een request hebt uitgevoerd, dat je het AJAX XMLHttpRequest object opnieuw moet initailiseren. (dus opnieuw http = new ...)
Ik heb daar ook ooit 5 posts achter moesten maken verspreid over 7 dagen :-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var http = createRequestObject();
function createRequestObject(){
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert('Probleem met serververbinding');
}
return req;
}
function createRequestObject(){
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert('Probleem met serververbinding');
}
return req;
}
ik had alleen de relevante code geplaatst, maar hoezo moet je het AJAX XMLHttpRequest object opnieuw initailiseren. Het werkt al goed alleen nu moet hij nog wachten met de return totdat hij echt klaar is.
w8 ff kben ff aan het bellen kzal zo kijken
dat true is voor het asynchronious :) en dit kan niet met een return, of je moet een while loop doen om die return
hoe bedoel je precies een while om de return
{
blijf in de lus
}
return info;
edit: opnieuw het object aanmaken hoeft trouwens niet. Gewoon open() opnieuw aanroepen is al voldoende. Nadeel van 1 object gebruiken is dat verschillende requests door elkaar gaan lopen, en dat kan niet. Daarom raad ook ik aan om gewoon iedere request over een apart object te doen.
Gewijzigd op 11/03/2006 00:01:00 door Jelmer -
Jelmer:
Blijkbaar wel met dat console pagina van mij :-)opnieuw het object aanmaken hoeft trouwens niet. Gewoon open() opnieuw aanroepen is al voldoende. Nadeel van 1 object gebruiken is dat verschillende requests door elkaar gaan lopen, en dat kan niet. Daarom raad ook ik aan om gewoon iedere request over een apart object te doen.
best raar dat ik nooit last heb van dit probleem...
ok ik heb nu een while alleen het probleem is dat de het script perfect werkt als ik een alert in de while zet alleen als ik niks of iets anders in de while loop zet blijft hij oneindig doorgaan.
If you wanted (pseudo code)
you code
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
var tid;
function statement1 () {
// your code here
if (!condition)
clearInterval(tid);
}
tid = setInterval('statement1()', someDelay);
function statement1 () {
// your code here
if (!condition)
clearInterval(tid);
}
tid = setInterval('statement1()', someDelay);
edit: bron, er staan nog wat betere oplossingen, al denk ik neit dat je daar je oplossing moet zoeken. Je probeert nu een synchrone denkwijze (code van boven naar onder uitvoeren) toe te passen op een asynchroon proces. XMLHTTPRequest is namelijk eigenlijk zo bedacht dat je het na object.send(null) z'n gang kan laten gaan, en dat waneer het klaar is het wel een event (namelijk onreadystatechange) aanroept. Dus je hoeft niet te wachten op het laden van de pagina. Jij probeert nu een functie te maken die dat wel doet, en dan moet je dus de computer bezig houden tijdens het opvragen van de pagina, terwijl je best wat anders nuttigs met die tijd had kunnen doen.
Gewijzigd op 11/03/2006 15:10:00 door Jelmer -
Dit is mijn code tot nu toe
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
36
37
38
39
40
41
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
var info;
var status = false;
function createRequestObject(){
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert('Probleem met serververbinding');
}
return req;
}
function sendRequest(value, soort){
status = false;
http = createRequestObject();
http.open('GET', 'getinfo.php?' + soort + '=' + value, true);
http.onreadystatechange = handleResponseText;
http.send(null);
}
function handleResponseText(){
if(http.readyState == 4 && http.status == 200){
if(http.responseText){
info = http.responseText;
status = true;
}
}
}
function send(waarde, soort){
sendRequest(waarde, soort);
while(!status){
alert(status);// hier gaat het om
}
return info;
}
var status = false;
function createRequestObject(){
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert('Probleem met serververbinding');
}
return req;
}
function sendRequest(value, soort){
status = false;
http = createRequestObject();
http.open('GET', 'getinfo.php?' + soort + '=' + value, true);
http.onreadystatechange = handleResponseText;
http.send(null);
}
function handleResponseText(){
if(http.readyState == 4 && http.status == 200){
if(http.responseText){
info = http.responseText;
status = true;
}
}
}
function send(waarde, soort){
sendRequest(waarde, soort);
while(!status){
alert(status);// hier gaat het om
}
return info;
}
toch opgelost door het volgens de originele bedoeling van ajax moet
Anders kijk je gewoon in je Javascript console.
joop:
toch opgelost door het volgens de originele bedoeling van ajax te doen
Sebastiaan:
Dus hiermee bedoel ik als het ooit niet lukt dan kijk je in Firefox Javascript console.Anders kijk je gewoon in je Javascript console.
dat had ik ook al door dat dat handig is, alleen soms zijn er geen fouten maar doet hij het toch niet zoals je wil