7

我有一个使用 javascript 的 html 页面,用户可以选择从他的 PC 读取和使用他自己的文本文件。但我想在服务器上有一个示例文件,用户可以通过单击按钮打开该示例文件。我不知道打开服务器文件的最佳方法是什么。我google了一下。(我是 html 和 javascript 的新手,所以我对以下内容的理解可能不正确!)。我发现 javascript 是基于客户端的,打开服务器文件不是很简单。看起来使用 iframe (?) 是最简单的。所以我正在尝试(第一个测试只是打开它的网页加载)以下。在服务器上与我的 html 页面相同的目录中使用 kgr.bss:

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

怎么了?读取此文件的正确(或最佳)方法是什么?

注意:我看到文件被读取并显示在框架中。

谢谢!

4

2 回答 2

18

您最好的选择是,因为文件在您的服务器上,所以通过“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功能并从 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 并不限于一般情况下的客户端。事实上,它在服务器和其他地方正在大幅复苏。

于 2012-11-11T09:21:54.230 回答
6

检索文本文件(或任何其他服务器端资源)的常用方法是使用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 正在改变这一点。你可以在这里阅读它。

于 2012-11-11T09:21:10.257 回答