我有一个数据文件,换行符分隔,我希望将各种名称放入数组中以便在JavaScript中进行处理。这组名称最终需要进行排序,但是现在我正在处理实际的文件加载过程。这是我现在的代码。
var nameslist = document.baseURI.split('.'); nameslist.pop(); nameslist = nameslist.join('.') + ".dat";
console.log("Attempting to read from file: " + nameslist);
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');
reader.open("GET", nameslist, false);
reader.send(null);
nameslist = reader.responseText.split('\n');
nameslist.pop();
console.log("Elements read: " + nameslist.length);
正如预期的那样,数据文件由三个名称组成(对于测试用例),我在控制台日志中得到以下结果......
"试图从文件中读取:file:///home/username/Desktop/test/test.dat" test.js:11
"元素阅读:3" test.js:19
问题是我在日志中也收到了以下警告和错误,我想删除它(因为忽略它可能会导致以后出现问题)......
主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助http://xhr.spec.whatwg.org/ test.js:14
语法错误test.dat:1
从我对折旧警告的研究中,似乎Javascript作为一种语言不喜欢同步操作,因为它会降低脚本的运行速度。但是,在这种情况下,我需要在脚本的其余部分可以有意义地运行之前加载所有内容。我知道我可以重构这个以将脚本的其余部分放在一个函数中,该函数在数据被拉出responseText之后被调用,并且只是在reader.open行上使用true,但是有更好的方法来使JavaScript同步加载有问题的数据文件,而不必开始创建一个只会被调用一次的main()函数?
至于指向数据文件第一行的流氓错误,我坦率地说难过。关于什么可能导致这种行为的任何想法?
提前感谢我从社区获得的任何答案。
答案 0 :(得分:1)
通过重写代码解决如下:
var nameslist = document.baseURI.split('.'); nameslist.pop(); nameslist = nameslist.join('.') + ".dat";
console.log("Attempting to read from file: " + nameslist);
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');
reader.open("GET", nameslist);
reader.onloadend = main;
reader.responseType = "text";
reader.send();
function main()
{
nameslist = reader.responseText.split('\n'); nameslist = nameslist.filter(function(n){return n;}).sort();
console.log("Elements read: " + nameslist.length);
// Additional code to be run after the load is complete goes in this block, starting at this line.
}