2012-11-11 153 views
6

我有一個使用javascript的html頁面,它可以讓用戶從他的電腦中讀取和使用他自己的文本文件。但我想在服務器上有一個示例文件,用戶可以通過點擊按鈕打開。 我不知道什麼是打開服務器文件的最佳方式。我搜索了一下。 (我是新來的HTML和JavaScript,所以也許我的理解以下是不正確的!)。我發現JavaScript基於客戶端,打開服務器文件並不是非常簡單。它看起來最容易使用iframe(?)。 所以我試圖(首先測試只是打開它的網頁onload)以下。隨着服務器作爲我的HTML頁面放在同一個目錄kgr.bss:使用javascript讀取服務器文件

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

和(與file_inhoud,線別處定義)

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"); 
} 

調試功能顯示:

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

所以停止該程序的聲明是:

var file_inhoud=doc.document.body; 

有什麼不對?什麼是正確(或最好)的方式來閱讀這個文件?

注:我看到文件被讀取並顯示在框架中。

謝謝!

+0

什麼是「的.bss」後綴的程序中使用? – user197508

+0

.bss是一個完整的披露文件。由BBO用於存儲橋樑招標協議 – user1798023

回答

3

檢索文本文件(或任何其他服務器端資源)的常用方法是使用AJAX。這裏是你如何能提醒文本文件的內容的一個示例:

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(); 

與最終目標的問題卻是,它歷來沒有能夠使用JavaScript來訪問客戶端文件系統。但是,新的HTML5文件API正在改變這一點。你可以閱讀它here

+0

謝謝! (添加評論給其他答覆) – user1798023

17

你最好打賭,因爲文件在你的服務器上是通過「ajax」檢索它。這代表異步JavaScript和XML,但XML部分是完全可選的,它可以用於各種內容類型(包括純文本)。 (對於這個問題,異步部分是可選的爲好,但它的最好堅持這一點。)

下面是使用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); 
     } 
    } 
} 

你會調用像這樣:

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

但是,上面的內容有些簡化。它可以與現代瀏覽器一起使用,但不適用於一些較舊的瀏覽器,您需要解決一些問題。

更新:您在下面的評論中表示您使用的是jQuery。如果是這樣,你可以用它ajax function並獲得jQuery的解決方法的好處對一些瀏覽器的不一致性:

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

旁註:

我發現,JavaScript是基於客戶端...

號這是一個神話。 JavaScript只是一種編程語言。它可以在瀏覽器中使用,在服務器,工作站等,其實上,JavaScript是原本服務器端使用而開發的。

這些天來,最常見的用途(和你的使用情況)確實是在Web瀏覽器,客戶端,但JavaScript是不僅限於客戶端在一般情況下。事實上,它在服務器和其他地方有着重大的復甦。

+0

謝謝,這個作品! - 我使用jQuery,主要用於調用函數一個按鈕被點擊時。可能我沒有使用它。我發現它的網站不太容易得到我需要的信息。 - 當谷歌搜索我的問題,我發現引用了Ajax,但我跳過他們。我認爲它需要一些額外的包括或安裝。但它適用於你的例子。 - 評論唯一的方式來回覆在這個論壇上的答覆? – user1798023