Ik wil graag een functie maken waarmee ik een AJAX-request doe, en dan ook de response als return-waarde van die functie heb.
Theoretisch lukt het me, maar in praktijk niet.
Mijn code:
Als ik deze code nu uitvoer, dan blijft mijn browser 'hangen' en geeft de melding: 'script blijft hangen. wil je het script stoppen?'
Vervolgens kies ik dan voor NEE, en direct daarna heb ik mijn juiste return value.
Dit is uiteraard geen gewenste oplossing.
Als ik VOOR het while-loopje een alert zet, dan krijg ik die netjes te zien, en als ik dan op OK klik, geeft mijn functie ook direct de return-value terug.
Ik begrijp het probleem. De browser is zo hard bezig met de while dat ie geen 'tijd' heeft om de request netjes af te handelen, en zodra er dus een alert is, of zo'n script-stop-melding kan hij op dat moment de request afhandelen, en de jvpajax_result invullen.
Maar hoe los ik dit op?
Ik begrijp dat de A van AJAX voor Asynchroom staat, maar het zou toch moeten kunnen op enige manier.
Ik wil heel graag de functie wel op deze manier gebruiken, en niet in de handler-functie een div-je vullen ofzo. Het zou namelijk allemaal een stuk handiger werken als ik gewoon direct responses kan gebruiken van functies, aangezien ik de data in de response ook verder met javascript wil bewerken.
Theoretisch lukt het me, maar in praktijk niet.
Mijn code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| var jvpajax_result = ''; var handlerFunc = function(t) { jvpajax_result = t.responseText; } var errFunc = function(t) { jvpalax_result = 'Error ' + t.status + ' -- ' + t.statusText; } function AjaxGetContent(url) { jvpajax_result = ''; new Ajax.Request(url, {parameters:'thisvar=true&thatvar=Howdy', onSuccess:handlerFunc, onFailure:errFunc}); while (jvpajax_result == '') { // wachten } return jvpajax_result; } |
Als ik deze code nu uitvoer, dan blijft mijn browser 'hangen' en geeft de melding: 'script blijft hangen. wil je het script stoppen?'
Vervolgens kies ik dan voor NEE, en direct daarna heb ik mijn juiste return value.
Dit is uiteraard geen gewenste oplossing.
Als ik VOOR het while-loopje een alert zet, dan krijg ik die netjes te zien, en als ik dan op OK klik, geeft mijn functie ook direct de return-value terug.
Ik begrijp het probleem. De browser is zo hard bezig met de while dat ie geen 'tijd' heeft om de request netjes af te handelen, en zodra er dus een alert is, of zo'n script-stop-melding kan hij op dat moment de request afhandelen, en de jvpajax_result invullen.
Maar hoe los ik dit op?
Ik begrijp dat de A van AJAX voor Asynchroom staat, maar het zou toch moeten kunnen op enige manier.
Ik wil heel graag de functie wel op deze manier gebruiken, en niet in de handler-functie een div-je vullen ofzo. Het zou namelijk allemaal een stuk handiger werken als ik gewoon direct responses kan gebruiken van functies, aangezien ik de data in de response ook verder met javascript wil bewerken.
offtopic:
Ik gebruik nu trouwens Prototype voor de afhandeling van het AJAX-gebeuren, maar het probleem doet zich uiteraard ook voor als ik een zelfgeschreven AJAX-functie gebruik
Ik gebruik nu trouwens Prototype voor de afhandeling van het AJAX-gebeuren, maar het probleem doet zich uiteraard ook voor als ik een zelfgeschreven AJAX-functie gebruik