簡體   English   中英

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

[英]How to load a text file in JavaScript?

我正在創建一個簡單的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];
    }

    // ...
}

您可以使用XMLHttpRequest來獲取文件,假設它來自與主網頁相同的域。 如果沒有,並且您可以控制托管文件的服務器,則可以毫無困難地啟用CORS 例如

要逐行掃描,可以使用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();

如果您不能簡單地使用XHR或CORS加載數據,則可以始終使用JSON-P方法,方法是使用JavaScript函數將其包裝並動態地將腳本標記附加到頁面。

您將擁有一個服務器端腳本,它將接受一個callback參數,並返回類似callback1234(/* file data here */);

獲得數據后,解析應該是微不足道的,但您必須編寫自己的解析函數。 開箱即用的東西都沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM