Khi tôi hỏi câu hỏi có thể javascript
liệt kê các tệp trên máy chủ, mọi người đã trả lời "javascript
không thể truy cập hệ thống tệp của máy chủ vì đó là client-side scripting language
". Nhưng tôi nghĩ rằng câu trả lời chỉ là một phần đúng, bởi vì trình duyệt có thể liệt kê các nội dung của thư mục máy chủ nếu dirlisting
được kích hoạt. Vì vậy, tôi đã quyết định phân tích đầu ra đó - không cần sử dụng cgi
khi bạn đã có thể xem dữ liệu mình cần ở định dạng xml
. Vì vậy, đây là những gì tôi đã làm:Liệt kê thư mục máy chủ bằng JavaScript XHR
Tôi đang sử dụng lighttpd
, và các mục quan trọng trong lighttpd.conf
là:
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
sử dụng để kiểm tra XHR
trông như thế này: trang danh sách
<?xml version="1.0"?>
<anchors>
<a>foo</a>
<a>bar</a>
</anchors>
Directory, tạo bởi 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
trang sử dụng để tạo 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>
Tất cả trong số đó hoạt động tốt (bạn bị lỗi 'foo' trong một hộp cảnh báo), nhưng khi tôi request.open
thư mục thay vì xml
, tôi nhận được gì, thậm chí không ở bảng điều khiển lỗi.
'request.readyState' được bỏ qua cho ngắn gọn của mã ví dụ, và file 'xml' đã được tạo ra bởi' server module mod_dirlisting.so', vì vậy tôi không thể thao tác sản lượng bán không chính xác của nó ('& nbsp' vv) theo bất kỳ cách nào, nhưng tôi có thể chọn bỏ qua nó bằng cách phân tích cú pháp đầu ra bằng cách sử dụng 'request.responseType = 'document'', đó thực sự là câu trả lời trực tiếp cho vấn đề của tôi. Cảm ơn bạn. – Ulrik