Ik heb een pagina index.php gemaakt (PHP) die een lijst samenstelt van bepaalde bestanden in een directory, en die in een Javascript array plaatst. Clientside wordt er een <select> samengesteld met de inhoud van die array. Dat werkt allemaal uitstekend, de array wordt netjes gevuld met path/bestandsnaam. Het form submit naar processfile.php die er wat mee doet, maar het target van dat form is een iframe in index.php omdat ik a) niet wil dat er gerefreshed wordt, en b) omdat ik de output wil zien zonder popups en dergelijke. Niet willen refreshen is omdat er uiteindelijk duizenden bestanden worden bewerkt, en de reden dat ik met die listbox werk is omdat het te lang duurt om in 1 run duizenden bestanden te bewerken (dan timed het script uit en het zal sowieso een tijdje duren voordat ie klaar is).
Nou had ik dus bedacht dat de pagina als volgt werkt:
- index.php wordt geladen en de bestanden worden in de array gezet - werkt
- de listbox wordt met Javascript gemaakt aan de hand van de array - werkt
- er staat een button "process" met als onclick de volgende code:
Wat ie dus doet is de volgende <option> selecteren aan de hand van globale var nextFile die in het begin op 0 staat.
- als ik op submit druk wordt het form gesubmit en in processfile.php wordt de bestandsnaam nu en dat gaat goed; ik zie de bestandsnaam netjes in het iframe.
- onderaan processfile.php staat dit:
waarmee ik dus in index.php de Javascriptfunctie weer aan wil roepen, en zo dus recursief en wel de hele lijst door wil.
MAAR dit werkt niet helemaal. Wat ie doet als ik zelf op de "Process" knop druk, is het form submitten door de functie processFile(), en vervolgens die functie opnieuw aanroepen vanuit het iframe. Het probleem is dat ie ondanks dat de functie aangeroepen wordt, het form niet de 2e keer gesubmit wordt. Wel zie ik het geselecteerde item verspringen in de listbox. Ik kan ook gewoon opnieuw op de knop drukken, dan submit ie wel.
Mijn vraag is nu: waarom submit ie vanuit het iframe keer niet? Is dit een beveiligingsissue waar ik tegenaan loop (kan ik me iets bij voorstellen)? Kan ik dit beter iets anders aanpakken, en zo ja; hoe zou jij dat doen, met in je achterhoofd de eisen (niet index.php refreshen, wel output van processfile.php op de pagina)?
('k heb hier en met google rondgezocht maar echt vergelijkbare problemen kom ik niet tegen)
Heb ik hier nog de HTML met het form, waarschijnlijk niet zo relevant.
Nou had ik dus bedacht dat de pagina als volgt werkt:
- index.php wordt geladen en de bestanden worden in de array gezet - werkt
- de listbox wordt met Javascript gemaakt aan de hand van de array - werkt
- er staat een button "process" met als onclick de volgende code:
JavaScript:
1
2
3
4
5
6
7
8
| function processFile(listboxID, formID) { var ListBox = document.getElementById('filelist'); var FileForm = document.getElementById('processform'); ListBox.selectedIndex = nextFile; nextFile++; FileForm.submit(); } |
Wat ie dus doet is de volgende <option> selecteren aan de hand van globale var nextFile die in het begin op 0 staat.
- als ik op submit druk wordt het form gesubmit en in processfile.php wordt de bestandsnaam nu en dat gaat goed; ik zie de bestandsnaam netjes in het iframe.
- onderaan processfile.php staat dit:
JavaScript:
1
2
3
| <script type="text/javascript"> parent.top.processFile(); </script> |
waarmee ik dus in index.php de Javascriptfunctie weer aan wil roepen, en zo dus recursief en wel de hele lijst door wil.
MAAR dit werkt niet helemaal. Wat ie doet als ik zelf op de "Process" knop druk, is het form submitten door de functie processFile(), en vervolgens die functie opnieuw aanroepen vanuit het iframe. Het probleem is dat ie ondanks dat de functie aangeroepen wordt, het form niet de 2e keer gesubmit wordt. Wel zie ik het geselecteerde item verspringen in de listbox. Ik kan ook gewoon opnieuw op de knop drukken, dan submit ie wel.
Mijn vraag is nu: waarom submit ie vanuit het iframe keer niet? Is dit een beveiligingsissue waar ik tegenaan loop (kan ik me iets bij voorstellen)? Kan ik dit beter iets anders aanpakken, en zo ja; hoe zou jij dat doen, met in je achterhoofd de eisen (niet index.php refreshen, wel output van processfile.php op de pagina)?
('k heb hier en met google rondgezocht maar echt vergelijkbare problemen kom ik niet tegen)
Heb ik hier nog de HTML met het form, waarschijnlijk niet zo relevant.
code:
1
2
3
4
5
6
| <form id="processform" action="processfile.php" method="get" target="processframe">
<select id="filelist" name="filename" onfocus="buildFileListBox(document.getElementById('filelist'));">
<option id="firstoption">Building tree...</option>
</select>
<input type="button" value="process" onclick="processFile();">
</form> |
Saved by the buoyancy of citrus