Hallo,
Ik zit nu met een aardig ingewikkeld probleem. Ik wil een functie maken die de result uit een ajax request (jQ) returnt. Dus, dan kan je de functie aanroepen met var result = functienaam(parameters);
Allemaal leuk enzo, maar de rest van de code in de functie wacht niet op de ajax, dus is de return leeg.
Returnen in de success van de ajax ($.ajax({success:function(){}}); ) gaat ook niet, dan krijg je de result niet terug.
Dus ik zat met twee problemen:
1. Je kan de response (data) van de server niet UIT de success functie krijgen in een normale var.
2. De rest van de code wacht niet en gaat gewoon verder.
Probleem 1 heb ik fugly opgelost door jQ aan te passen en aan het jqXHR object een extra item toe te voegen met success. Na de ajax request kan ik de responsedata dus zo aanspreken:
Voor probleem 2 is er een oplossing, namelijk async: false als optie setten, maar helaas is dat niet mogelijk icm jsonp. Ik kan ook niet een lokaal PHP bestand maken en die de externe laten includen (lelijk), want Cloud9 ondersteunt geen PHP files, en daar moet ik het helaas maken.
Op internet komen er veel oplossingen voor like:
Maar, dan krijg je de data alsnog niet gereturned uit de hoofdfunctie.
Ook een setTimeout werkt niet, want 1. dan kan de request nog bezig zijn en 2. dan return je naar die function en niet naar een var...
Hoe los ik dit dus op?
En voor wie een demo wil zien:
https://c9.io/fwest98/roosterpgplus (code + demo)
Ik zit nu met een aardig ingewikkeld probleem. Ik wil een functie maken die de result uit een ajax request (jQ) returnt. Dus, dan kan je de functie aanroepen met var result = functienaam(parameters);
Allemaal leuk enzo, maar de rest van de code in de functie wacht niet op de ajax, dus is de return leeg.
Returnen in de success van de ajax ($.ajax({success:function(){}}); ) gaat ook niet, dan krijg je de result niet terug.
Dus ik zat met twee problemen:
1. Je kan de response (data) van de server niet UIT de success functie krijgen in een normale var.
2. De rest van de code wacht niet en gaat gewoon verder.
Probleem 1 heb ik fugly opgelost door jQ aan te passen en aan het jqXHR object een extra item toe te voegen met success. Na de ajax request kan ik de responsedata dus zo aanspreken:
JavaScript:
1
2
| var submit = $.ajax({.....}); console.log(submit.modification.success); |
Voor probleem 2 is er een oplossing, namelijk async: false als optie setten, maar helaas is dat niet mogelijk icm jsonp. Ik kan ook niet een lokaal PHP bestand maken en die de externe laten includen (lelijk), want Cloud9 ondersteunt geen PHP files, en daar moet ik het helaas maken.
Op internet komen er veel oplossingen voor like:
JavaScript:
1
2
3
4
5
6
7
8
| function doSomething(data) { /* Do something with your data */ } $.ajax({ /*.....*/ success: doSomething }); |
Maar, dan krijg je de data alsnog niet gereturned uit de hoofdfunctie.
Ook een setTimeout werkt niet, want 1. dan kan de request nog bezig zijn en 2. dan return je naar die function en niet naar een var...
Hoe los ik dit dus op?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
| function getData(sendData) { var request = $.ajax({ url: 'foobar.php', dataType: 'jsonp', data: sendData, }); /* DIT IS DUS TE VROEG EN MOET PAS NA DE REQUEST */ var data = request.modification.success.item; return data; } console.log(getData({'option': 'value'})); |
En voor wie een demo wil zien:
https://c9.io/fwest98/roosterpgplus (code + demo)
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI