使用jQuery get()加载大型文本文件的最佳实践

目前我将get的结果存储在一个字符串中,因为我打开的文件是纯文本文件,大小为3MB到20MB。

然后我解析这个字符串并修改它,以便最终结果可以以html格式输出。

我只是在寻找一个健全性检查,看看以这种方式加载是否是最好的方法?

此外,有没有办法加载目标文本文件的大块,解析块,请求另一个块等。有点像音乐播放器在播放歌曲时缓冲歌曲。

谢谢

有没有办法加载目标文本文件的大块,解析块,请求另一个块等。

要检索资源的一部分(或块),请使用HTTP Range标头 。 大多数Web服务器正确地尊重此标头。

示例HTTP请求:

GET /resource/url/path HTTP/1.1\r\n User-agent: whatever\r\n Host: www.example.com\r\n Range: bytes=0-3200\r\n\r\n 

更新:

使用jQuery,v1.5及更高版本,您可以告诉jQuery为单个ajax调用发送额外的HTTP标头,如下所示:

  $.ajax({type: "GET", url: url, headers : { "Range" : 'bytes=0-3200' }, .... 

如果你不想修改每个$.ajax()调用,Stofke说你可以使用“beforeSend”fn。 像这样的东西:

  $.ajaxSetup({ beforeSend : function(xhr) { xhr.setRequestHeader("Range", "bytes=0-3200" ); }}); 

使用$.ajaxSetup() ,您需要为每个额外的调用修改该范围标头。

我不知道告诉jQuery自动加载资源的方法。 我想你必须在ajax调用的success()中使用setTimeout()或其他东西自己做。 每次收到响应时,调用setTimeout()并进行下一次ajax调用。 您的浏览器驻留Javascript将需要跟踪您已检索的文件的哪些部分,以及您希望接下来的哪个部分(字节索引)。

另一种方法是只在你的应用程序准备就绪时才进行ajax调用。 而不是等待来自ajax调用的success(),只需在完成第一个范围检索的结果处理后进行ajax调用。

另外:为了支持算术目的,在进行第一次GET之前,您可以使用HEAD调用来学习资源的长度,这将告诉您可以使用的范围内的最大索引。

可能不是你需要的东西,因为我相信它仍然会获取整个文档并从中提取一部分。 但无论如何我都会添加它也许它很有用。

从jquery文档:

与$ .get()不同.load()方法允许我们指定要插入的远程文档的一部分 。 这是通过url参数的特殊语法实现的。 如果字符串中包含一个或多个空格字符,则假定第一个空格后面的字符串部分是确定要加载的内容的jQuery选择器。

我们可以修改上面的示例,只使用获取的文档的一部分:

 $('#result').load('ajax/test.html #container'); 

当此方法执行时,它会检索ajax / test.html的内容,但随后jQuery会解析返回的文档以查找ID为container的元素。 此元素及其内容将插入到具有结果ID的元素中,并且将丢弃检索到的文档的其余部分。