【问题标题】:reading server file with javascript用javascript读取服务器文件
【发布时间】:2012-10-31 01:24:18
【问题描述】:

我有一个使用 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;

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

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

谢谢!

【问题讨论】:

标签: javascript file


【解决方案1】:

您最好的选择是通过“ajax”检索文件,因为文件在您的服务器上。这代表 Asynchronous JavaScript And 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 并不局限于一般情况下的客户端。事实上,它在服务器和其他地方正在大幅复苏。

【讨论】:

  • 谢谢,这行得通! - 我正在使用 jQuery,主要用于在单击按钮时调用函数。可能我用的还不够。我发现它的网站不是很容易获得我需要的信息。 - 在谷歌搜索我的问题时,我发现了对 Ajax 的引用,但我跳过了它们。我认为它需要一些额外的包含或安装。但它适用于您的示例。 - cmets 是回复此论坛回复的唯一方法吗?
【解决方案2】:

检索文本文件(或任何其他服务器端资源)的常用方法是使用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

【讨论】:

  • 谢谢!! (在其他回复中添加了 cmets)
  • 到底谁还在使用 ActiveX?
  • @pthurmond "ActiveX" 位是处理 IE6 所必需的,它有自己的特殊 XMLHttpRequest。这个答案是 6 年前发布的;现在你可能会使用浏览器标准化的 fetch API(如果你需要支持旧浏览器,可以使用 polyfill)而不是XMLHttpRequest
  • 我知道实现 IE6 兼容性是多么糟糕。这就是全部了。幸运的是,我们 Web 开发人员不必再这样做了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2012-11-28
  • 2011-10-30
  • 1970-01-01
  • 2012-06-19
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多