如何在 JavaScript 中加载文本文件?

2024-01-07

我正在创建一个简单的 WebGL 项目,需要一种加载模型的方法。我决定使用 OBJ 格式,所以我需要一种方法来加载它。该文件(将)存储在服务器上,我的问题是:JS 中的文件如何加载到文本文件中并逐行扫描它,逐个令牌(就像 C++ 中的流一样)?我是 JS 新手,因此我的问题。方法越简单越好。

更新:我使用了你的解决方案,broofa,但我不确定我是否做对了。我从您编写的 forEach 循环中的文件加载数据,但在它之外(即在您的所有代码之后),我一直在填充数据的对象是“未定义”。我究竟做错了什么?这是代码:

var materialFilename;

function loadOBJModel(filename)
{
    // ...

    var req = new XMLHttpRequest();
    req.open('GET', filename);
    req.responseType = 'text';
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
            var lines = req.responseText.split(/\n/g);
            lines.forEach(function(line)
            {
                readLine(line);
            });
        }
    }
    req.send();

    alert(materialFilename);

    // ...
}

function readLine(line)
{
    // ...

    else if (tokens[0] == "mtllib")
    {
        materialFilename = tokens[1];
    }

    // ...
}

您可以使用XMLHttp请求 https://www.google.com/search?q=mdn%20xmlhttprequest获取文件,假设它来自与您的主网页相同的域。如果没有,并且您可以控制托管文件的服务器,则可以启用CORS https://developer.mozilla.org/en-US/docs/HTTP_access_control没有太多麻烦。例如。

要逐行扫描,可以使用 split()。例如。像这样的东西...

var req = new XMLHttpRequest();
req.open('GET', '/your/url/goes/here');
req.onreadystatechange = function() {
  if (req.readyState == 4) {
    if (req.status == 200) {
      var lines = req.responseText.split(/\n/g);
      lines.forEach(function(line, i) {
        // 'line' is a line of your file, 'i' is the line number (starting at 0)
      });
    } else {
      // (something went wrong with the request)
    }
  }
}

req.send();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中加载文本文件? 的相关文章

  • JavaScript 对输入的循环创建一个对象数组

    我正在尝试循环 div 中的输入元素 以创建对象数组 div div
  • 缩小 ASP.NET 生成的 Javascript 的最佳方法是什么?

    在 ASP NET 3 5 运行时缩小 ASP NET 生成的 Javascript 例如由 webresource axd 提供的 Javascript 的最佳方法是什么 我尝试使用Mb压缩 http mbcompression code
  • 如何阻止 Django 中发生级联删除?

    我的 Django 应用程序中有三个模型类 class Folder models Model folder models ForeignKey Folder null True blank True related name folder
  • 始终滚动 div 元素而不是页面本身

    我有一个带有内部的页面布局 div 包含页面上重要内容的元素 设计的重要部分是 content height 300px width 500px overflow scroll 现在 当包含的文本大于 300px 时 我需要能够滚动它 是否
  • 动态添加jinja模板

    我有一个 jinja 模板 它是一组 div 标签内的唯一内容 div include temppage html div 当我按下按钮时 我想用其他内容替换标签之间的所有内容 我希望用另一个 jinja 模板 include realpa
  • 移动浏览器上的 Javascript / jQuery 页面更改事件

    我正在设计一个移动网站 同时考虑所有领先的浏览器 Safari Chrome Dolphin Opera 我想显示一个 正在加载 元素页面导航 更改 请求新页面 我无法在锚标签上使用点击事件 因为有很多锚标签存在preventDefault
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • 传单圆圈绘制/编辑问题

    我第一次制作传单 并面临绘制圆圈和编辑 更改圆圈位置 的问题 我面临的问题是 编辑 移动 圆从一个位置到另一位置会改变其半径 Note 请尝试在给定的小提琴中在地图顶部创建圆圈 然后通过单击编辑按钮将其移动到底部 如果我在地图的顶部创建圆圈
  • 如何在 JavaScript 中检查未定义的变量

    我想检查变量是否已定义 例如 以下内容会引发未定义的错误 alert x 我怎样才能捕获这个错误 在 JavaScript 中 null是一个对象 不存在的事物还有另一种价值 undefined DOM 返回null对于几乎所有无法在文档中
  • 如何使用 Eclipse 作为 Javascript IDE?

    我从官方下载页面下载了 eclipse Javascript IDE 但是 当我启动应用程序时 它显示 必须提供 Java 运行时环境或 Java 开发工具包才能运行 eclipse 我已经有一个运行良好的 eclipse 的 java I
  • JavaScript - 类根据条件扩展

    事情是这样的 我有一个名为 A 的主课 我希望这个班级能够扩展 B 级 class A extends B 但事实上 我希望 B 类在特定条件下扩展 C D 或 E class B extends B1 or class B extends
  • 输入和文本区域可以拖动吗?

    MDN 规范以及我能通过 Google 找到的每个网站都说所有 HTML 元素都可以拖动 然而 在实践中 我发现我无法拖动文本输入或文本区域 即使它们已被禁用 例如 使用以下代码 img src http www placehold it
  • 字符串化 JavaScript 对象

    我正在寻找字符串化一个对象 我想要这样的输出 1 valeur dalebrun usager experttasp date 2013 08 20 16 41 50 2 valeur test usager experttasp date
  • Nuxt + Vuex - 如何将 Vuex 模块分解为单独的文件?

    在 Nuxt 文档中 here https nuxtjs org guide vuex store module files 它说 您可以选择将模块文件分解为单独的文件 state js actions js mutations js an
  • 将命令行参数传递给 emscripten 生成的应用程序

    当使用 Emscripten 编译 C 程序时 会生成一个 HTML 页面来显示程序的结果 我想知道如何将命令行参数传递给应用程序 例如 对于原始的 C 程序 它是 bfs 32 1 我能够通过向生成的 html 文件添加一行来传递命令行参
  • 使用 sockjs 和 stomp 进行 /info 请求期间没有 cookie

    我正在尝试将 Spring Security 与 websockets 一起使用 作为一个例子 我正在使用 spring websocket chat https github com salmar spring websocket cha
  • 如何在javascript中删除对象的一部分

    这是我的代码 var data btn click function total data push id total cell val1 val2 val3 每次用户点击btn按钮 我向数据对象添加一些值 现在我的问题是如何删除有的部分i
  • 如何设置 .eslintrc 来识别“require”?

    我是新来的ESLint http eslint org 并且我已经成功地将 ESLint 与IntelliJ https www jetbrains com idea 开箱即用 我的 ESLint 集成无法识别node 但对文档的基本审查表
  • angularjs 将 ngModel 从包装器指令传递到包装器指令

    我是 Angular 的新手 但仍然痛苦地纠结于自定义指令 我想重用这段 HTML
  • d3.js 更新视觉效果

    我有一个与 d3 js 放在一起的树形图 我通过 getJSON 填充数据 效果很好 但是 我在 setInterval 方法中具有此功能 并且它似乎并没有刷新自身 var treemap d3 layout treemap padding

随机推荐

  • C++ - 更改 X 窗口中的光标

    我以为这很容易找到 但谷歌搜索却毫无帮助 有没有一个简单的 API 可以改变 X 窗口中的鼠标光标 我知道在 Windows 中你可以只调用 SetCursor include
  • AVPlayer 动态音量控制

    如何动态更改 AVPlayer 的音量 我的意思是 我想在每次按下按钮时将音量静音 给定的代码似乎仅在编译时更改它 运行时怎么办 AVURLAsset asset AVURLAsset URLAssetWithURL self myAsse
  • 类路径中的 ICEfaces 库可防止文件下载时弹出“另存为”对话框

    一旦我将库icefaces jaricepush jaricefaces ace jar添加到我的类路径中以便使用ACE组件 我的另存为对话框就不会弹出吗 我不确定这是否是一个错误 但如果类路径中没有库 它就可以工作 这是我的另存为方法 p
  • 用 pyspark 之前已知的良好值填充 null

    有办法替换吗nullpyspark 数据框中的值与最后一个有效值 还有额外的timestamp and session列 如果您认为需要它们来进行 Windows 分区和排序 更具体地说 我想实现以下转换 session timestamp
  • 将数据从 glReadPixels() 转换为 OpenCV::Mat

    我想从动画中获取每个 OpenGL 帧glReadPixels 并将数据转换为OpenCV 垫 我知道glReadPixels 从下一层到上一层 从左到右 按行获取数据 另一方面 OpenCV 以不同的方式存储数据 有谁知道任何库或任何教程
  • 与 svn 的 SSL 协商失败

    我正在运行一个接受 https 请求的服务器 我已经生成了自己的证书 当在 Firefox 中访问该网站时 我收到未知证书错误 但这没关系 这 我认为 表明端口转发等有效 我正在尝试使用 svn 来解决这个问题 当在服务器上使用 svn 但
  • Java HttpURLConnection.getInputStream 但得到 401 IOException

    我正在用 Java 为 CouchDB 编写一个 REST 客户端 下面的代码应该是相当标准的 this httpCnt connect Map
  • 使用 PIL 或 Numpy 数组,如何从图像中删除整行?

    我想知道如何从图像中删除整行 最好是根据行的颜色 示例 我有一个高度为 5 像素的图像 顶部两行和底部两行是白色 中间行是黑色 我想知道如何让 PIL 识别这一行黑色像素 然后删除整行并保存新图像 我对 python 有一些了解 并且到目前
  • 当调用 onBlur 时,Firefox 中的 relatedTarget 为 null

    我正在尝试创建一条帮助消息 当用户单击切换按钮以显示帮助消息或通过单击页面上的其他位置来单击时 该消息将消失 解决方案似乎是查看relatedTarget的财产onblur事件并防止onblur处理程序从运行时relatedTarget是切
  • 如何在 Android 应用程序级别检查 SIM 卡锁定

    我正在寻找一种方法来查明 Android 设备是否已锁定 SIM 卡 我知道 efs 中应该是存储此设置的文件 问题是没有 root 就无法访问 efs USSD 代码如下 7465625 不再适用于 Samsung 设备上的 Androi
  • 用户控件与 Windows 窗体

    Visual Studio C 中的用户控件和 Windows 窗体有什么区别 非常简单地说 用户控件是一种制作自定义 可重用组件的方法 用户控件可以包含其他控件 但必须由窗体托管 Windows 窗体是控件 包括用户控件 的容器 虽然它包
  • 如何扩展 Google 地图中的共享位置 URL?

    我正在尝试从谷歌地图共享位置链接获取位置 因此我使用 Google Shorten URL API 来扩展 URL 但是当我从 Android 设备共享 Google 地图应用程序的 URL 时 它给了我https maps app goo
  • 自定义 HTTP 授权标头

    我想知道将自定义数据放入 HTTP 授权标头中是否可以接受 我们正在设计一个 RESTful API 我们可能需要一种方法来指定自定义授权方法 作为一个例子 我们称之为FIRE TOKEN验证 根据规范 这样的事情是否有效并允许 Autho
  • 什么是本机构建环境?

    我只是从互联网上阅读信息 目前cmake 关于页面 http www cmake org cmake project about html 我需要信息来填补空白 这有助于了解全局 我希望答案很简单 什么是本机构建环境 背景 我需要知道how
  • jQuery 设置单选按钮

    我正在尝试设置一个单选按钮 我想通过使用值或 ID 来设置它 这是我尝试过的 input radio name cols newcol attr checked true newcol是单选按钮的 id 也许需要进行一些编辑 有两组无线电盒
  • Cardview 中的 ConstraintLayout 添加空白

    我正在尝试创建一个CardView有一个ConstraintLayout组织一些TextView 有时它会按预期显示 但有时 它会添加额外的空白 例如当键盘关闭时 会破坏布局 我下面有一个 GIF 显示CardView在同一时间段内工作和不
  • 使用 SQL Server Server Management Studio 导入/导出数据库

    我认为这很简单 但事实并非如此 我确信有一种简单的方法可以做到这一点 但我无法找到它 我真丢脸 我想导入 导出数据库本身 表 约束 外键等 我宁愿不用它获取数据 但如果没有其他方法 我可以在之后删除它 那么 如何使用 MS SQL Serv
  • 如果没有发生左值到右值的转换,取消引用无效指针是否合法

    尽我所能 我见过的最接近的答案是this https stackoverflow com questions 7346634 dereferencing an invalid pointer then taking the address
  • YouTube 嵌入 iframe 未在 Safari 中显示

    链接是http thecodeclub org http thecodeclub org 还有一个 YouTube 视频 在 Chrome 中工作正常 但 iframe 在 Safari 中仍为空白 有其他人遇到过这个问题或者有解决办法吗
  • 如何在 JavaScript 中加载文本文件?

    我正在创建一个简单的 WebGL 项目 需要一种加载模型的方法 我决定使用 OBJ 格式 所以我需要一种方法来加载它 该文件 将 存储在服务器上 我的问题是 JS 中的文件如何加载到文本文件中并逐行扫描它 逐个令牌 就像 C 中的流一样 我