用javascript读取服务器文件

use*_*023 6 javascript file

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

<IFRAME SRC="kgr.bss" ID="myframe" onLoad="readFile();"> </IFRAME>
Run Code Online (Sandbox Code Playgroud)

和(使用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");
}
Run Code Online (Sandbox Code Playgroud)

调试功能显示:

readFile=0//readFile=1//readFile=1a[object HTMLDocument]//
Run Code Online (Sandbox Code Playgroud)

所以停止程序的声明是:

var file_inhoud=doc.document.body;
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

T.J*_*der 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你这样称呼:

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

但是,上面的内容有所简化.它适用于现代浏览器,但不适用于某些较旧的浏览器,您必须解决某些问题.

更新:你在下面的评论中说你正在使用jQuery.如果是这样,你可以使用它的ajax功能,并获得jQuery的解决方案的一些浏览器不一致的好处:

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

边注:

我发现javascript是基于客户端的......

不,这是一个神话.JavaScript只是一种编程语言.它可以在浏览器,服务器,工作站等上使用.事实上,JavaScript 最初是为服务器端使用而开发的.

目前,最常见的用途(和您的用例)确实在Web浏览器中,客户端,但JavaScript在一般情况下不仅限于客户端.事实上,它正在服务器和其他地方重新抬头.


Asa*_*din 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();
Run Code Online (Sandbox Code Playgroud)

然而,您的最终目标的问题在于传统上不可能使用javascript来访问客户端文件系统.但是,新的HTML5文件API正在改变这一点.你可以在这里阅读.