以javascript /异步方式加载文本文件

时间:2013-12-24 16:43:04

标签: javascript php jquery

我需要在Javascript中将文本文件读入数组。

1)我从stackoverflow获得了这个基本代码:

var myArray = [];
$.get("../MyFile.txt", function(data){
  myArray = data.split('\n');                   
});

2)从php页面的原始加载调用时,代码工作得很好。 3)当从另一个php页面调用php页面时(通过window.location.href设置),代码永远不会工作。代码似乎开始了,但我怀疑,由于javascript的异步性质,它还没有完成,代码执行仍在继续。我的文件是大约260,000个单词的列表。这可能听起来很多,但它通常似乎在一秒钟内加载。在我可以做任何有效的事情之前,需要填充myArray。我试图使用asynch:false,但我仍然遇到这个问题。感谢您的任何想法...无论我如何试图超越这个问题,比如重新加载或检查数组的大小,我仍然面对一个在需要时没有填充的数组。

1 个答案:

答案 0 :(得分:1)

您只需使用回调将数据发送到需要它的函数。你不能在代码中的某个地方随意使用myArray,因为它必须从ajax调用的回调中链接起来。

$.get("text.txt", function(data){
  var myArray = data.split('\n');
  myCallback(myArray);
});

function myCallback(someArray) {
  console.log(someArray);
}

这是你可以搞砸的live demo (click)

关于你的评论“你不能”把代码放在回调中因为太多了 - 这有两个原因是有缺陷的。一:你别无选择。你必须使用回调。否则,这可能会起作用的唯一方法是,如果您的代码非常慢并且您拥有的全局变量(这是不好的做法)恰好在需要它的代码尝试使用它之前获取数据集。这意味着你的代码可能非常慢,这绝对不是一个答案。其次,如果代码太多,您可能不会以任何适当的方式将其划分为函数。尽管如此,您可以将所有内容放入函数中并将该函数用作回调函数。这些是基本的javascript原则。

如果不清楚:

$.get("text.txt", function(data){
  var myArray = data.split('\n');
  my10000LinesOfCode(myArray);
});

function my10000LinesOfCode(someArray) {
  console.log(someArray);
  //10,000 lines of code here.
  //but really, break up your code
}