Quando ho chiesto la questione può javascript
file elenco sul server, tutti risposto con "javascript
non può accedere file system del server, perché è un client-side scripting language
". Ma ho pensato che la risposta è solo parzialmente vera, perché il browser può elencare il contenuto della directory del server se dirlisting
è abilitato. Così, ho deciso di provare ad analizzare l'output: non è necessario utilizzare cgi
quando è già possibile visualizzare i dati necessari nel formato xml
. Così qui è quello che ho fatto:Directory Server List utilizzando JavaScript XHR
Sto usando lighttpd
, e le voci importanti lighttpd.conf
sono:
dir-listing.activate = "enable" #enables directory listing
dir-listing.auto-layout = "disable" #simplifies the list style
mimetype.assign = (".xml" => "text/xml") #deals with xmls
test.xml
utilizzato per testare XHR
assomiglia a questo: pagina dell'inserzione
<?xml version="1.0"?>
<anchors>
<a>foo</a>
<a>bar</a>
</anchors>
Directory, creato da lighttpd
mod_dirlisting.so
:
<?xml version="1.0" encoding="iso-8859-1"?>
<h2>Index of /directory/</h2>
<div class="list">
<table summary="Directory Listing" cellpadding="0" cellspacing="0">
<thead><tr><th class="n">Name</th><th class="m">Last Modified</th><th class="s">Size</th><th class="t">Type</th></tr></thead>
<tbody>
<tr><td class="n"><a href="../">Parent Directory</a>/</td><td class="m"> </td><td class="s">- </td><td class="t">Directory</td></tr>
<tr><td class="n"><a href="foo">foo</a></td><td class="m">2015-Jan-03 13:24:12</td><td class="s">39.4K</td><td class="t">application/octet-stream</td></tr>
</tbody>
</table>
</div>
test.html
pagina utilizzata per creare XHR
:
<html><head></head><body><script>
if (window.XMLHttpRequest) var request = new XMLHttpRequest();
else var request = new ActiveXObject('Microsoft.XMLHTTP');
request.open('post', 'test.xml', true);
request.send();
if (request) request.onreadystatechange = function() alert(request.responseXML.getElementsByTagName('a')[1].childNodes[0].nodeValue);
</script></body></html>
Tutto ciò funzionare bene (si ottiene 'foo' in una finestra di avviso), ma quando ho request.open
directory invece di xml
, non ottengo niente, nemmeno in console di errore.
'request.readyState' è stato omesso per brevità di esempio di codice, e file' xml' è stato generato da 'modulo server mod_dirlisting.so', quindi non può manipolare la sua uscita semi-corretta (' & nbsp' etc) in qualsiasi modo, ma posso scegliere di ignorarlo analizzando l'output usando 'request.responseType = 'document'', che in realtà era la risposta diretta al mio problema. Grazie. – Ulrik