2012-11-11 11 views
6

Mam stronę html używając javascript, która daje użytkownikowi opcję czytania i używania własnych plików tekstowych z jego komputera. Ale chcę mieć przykładowy plik na serwerze, który użytkownik może otworzyć za pomocą kliknięcia przycisku. Nie mam pojęcia, jaki jest najlepszy sposób otwierania pliku serwera. Trochę googlowałem. (Jestem nowy w html i javascript, więc może moje zrozumienie tego jest nieprawidłowe!). Zauważyłem, że javascript jest oparty na kliencie i otwarcie pliku serwera nie jest łatwe. Wygląda na to, że najłatwiej jest użyć elementu iframe (?). Tak więc próbuję (pierwszy test jest po prostu otwieranie go na stronie) następujące. Z kgr.bss w tym samym katalogu na serwerze jako moją stronę html:czytając plik serwera z javascript

<IFRAME SRC="kgr.bss" ID="myframe" onLoad="readFile();"> </IFRAME> 

i (z file_inhoud, linie zdefiniowane gdzie indziej)

function readFile() { 
    func="readFile="; 
    debug2("0"); 
    var x=document.getElementById("myframe"); 
    debug2("1"); 
    var doc = x.contentDocument ? x.contentDocument : (x.contentWindow.document || x.document); 
    debug2("1a"+doc); 
    var file_inhoud=doc.document.body; 
    debug2("2:"); 
    lines = file_inhoud.split("\n"); 
    debug2("3"); 
    fileloaded(); 
    debug2("4"); 
} 

funkcja Debug pokazuje:

readFile=0//readFile=1//readFile=1a[object HTMLDocument]// 

Tak więc oświadczenie, które zatrzymuje program, to:

var file_inhoud=doc.document.body; 

Co jest nie tak? Jaki jest poprawny (lub najlepszy) sposób, aby przeczytać ten plik?

Uwaga: Widzę, że plik jest odczytywany i wyświetlany w ramce.

Dzięki!

+0

co to jest użycie programu z przyrostka ".bss"? – user197508

+0

.bss jest plikiem pełnej jawności. Używany przez BBO do przechowywania umów zawierania umów mostowych – user1798023

Odpowiedz

3

Najczęstszym sposobem pobrania pliku tekstowego (lub dowolnego innego zasobu po stronie serwera) jest użycie AJAX. Oto przykład, jak można zaalarmować zawartość pliku tekstowego:

var xhr; 
if (window.XMLHttpRequest) { 
    xhr = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

xhr.onreadystatechange = function(){alert(xhr.responseText);}; 
xhr.open("GET","kgr.bss"); //assuming kgr.bss is plaintext 
xhr.send(); 

Problem z ostatecznym celem jednak jest to, że tradycyjnie nie można użyć javascript, aby korzystać z systemu plików klienta. Jednak nowy interfejs API pliku HTML5 zmienia to. Możesz przeczytać na ten temat: here.

+0

Dzięki! (dodano komentarze do innej odpowiedzi) – user1798023

17

Twój najlepszy zakład, ponieważ plik znajduje się na twoim serwerze to pobranie go przez "ajax". To oznacza asynchroniczny JavaScript i XML, ale część XML jest całkowicie opcjonalna, może być używana z różnymi rodzajami treści (w tym zwykłym tekstem). (Zresztą, asynchroniczny część jest opcjonalna, jak dobrze, ale najlepiej, aby trzymać z tym.)

Oto prosty przykład z prośbą danych plików tekstowych za pomocą ajax:

function getFileFromServer(url, doneCallback) { 
    var xhr; 

    xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = handleStateChange; 
    xhr.open("GET", url, true); 
    xhr.send(); 

    function handleStateChange() { 
     if (xhr.readyState === 4) { 
      doneCallback(xhr.status == 200 ? xhr.responseText : null); 
     } 
    } 
} 

Można by nazwać w następujący sposób:

getFileFromServer("path/to/file", function(text) { 
    if (text === null) { 
     // An error occurred 
    } 
    else { 
     // `text` is the file text 
    } 
}); 

Jednak powyższe jest nieco uproszczone. Działałoby to z nowoczesnymi przeglądarkami, ale nie niektórymi starszymi, w których trzeba rozwiązywać pewne problemy.

Aktualizacja: Mówiłeś, że w komentarzu poniżej, że używasz jQuery.Jeśli tak, możesz użyć jego ajax function i uzyskać korzyści z obejścia jQuery dla niektórych niezgodności przeglądarek: notatka

$.ajax({ 
    type: "GET", 
    url:  "path/to/file", 
    success: function(text) { 
     // `text` is the file text 
    }, 
    error: function() { 
     // An error occurred 
    } 
}); 

niepożądane:

stwierdziliśmy, że JavaScript jest oparta klient ...

Nie. To jest mit. JavaScript to tylko język programowania. Może być używany w przeglądarkach, na serwerach, na twojej stacji roboczej itp. W rzeczywistości JavaScript był pierwotnie opracowany do użytku po stronie serwera.

Obecnie najczęstsze użycie (i przypadek użycia) jest rzeczywiście w przeglądarkach internetowych po stronie klienta, ale JavaScript nie jest ograniczony do klienta w ogólnym przypadku. A tak naprawdę odradza się na serwerze i gdzie indziej.

+0

Dzięki, to działa! - Używam jQuery, głównie do wywoływania funkcji po kliknięciu przycisku. Prawdopodobnie nie używam go wystarczająco. Uważam, że jego strona internetowa nie jest bardzo łatwa do uzyskania potrzebnych informacji. - Podczas wyszukiwania w Google dla mojego numeru znalazłem odniesienia do Ajax, ale je pominąłem. Myślałem, że to wymaga dodatkowych dodatków lub instalacji. Ale działa na twoim przykładzie. - Czy komentarze są jedynym sposobem na odpowiedź na odpowiedź na tym forum? – user1798023