![](/img/trans.png)
[英]How to load a text file using JavaScript with a HTML combobox (<select>)?
[英]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.