目前我将获取的结果存储在一个字符串中,因为我打开的文件是大小为 3MB 到 20MB 的纯文本文件。
然后我解析这个字符串并修改它,以便最终结果可以以html格式输出。
我只是想进行健全性检查,看看以这种方式加载是否是最好的方式?
还有,有没有办法加载目标文本文件的一 block ,解析该 block ,请求另一个 block 等。有点像音乐播放器在播放歌曲时缓冲歌曲。
谢谢
最佳答案
is there a way to load a chunk of the target text file, parse the chunk, request another chunk, etc.
要检索资源的一部分(或 block ),请使用 HTTP Range header .大多数网络服务器正确地接受这个 header 。
示例 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 header ,如下所示:
$.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()
,您需要为每个额外的调用修改该范围 header 。
我不知道有什么方法可以告诉 jQuery 自动分块加载资源。我猜你必须自己在 ajax 调用的 success() 中使用 setTimeout() 或其他东西来完成。每次收到响应时,调用 setTimeout() 并进行下一次 ajax 调用。您的浏览器驻留 Javascript 将需要跟踪您已经检索到的文件的哪些部分,以及您接下来要获取的部分(字节索引)。
另一种方法是仅在您的应用准备好时才进行 ajax 调用。无需等待来自 ajax 调用的 success(),只需在处理完第一个范围检索的结果后进行 ajax 调用即可。
此外:为了支持算术目的,在执行第一个 GET 之前,您可以使用 HEAD 调用来了解资源的长度,它将告诉您可以使用的范围内的最大索引。
关于javascript - 使用 jQuery get() 加载大型文本文件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123953/