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

标签 javascript jquery text get

目前我将获取的结果存储在一个字符串中,因为我打开的文件是大小为 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/

相关文章:

javascript - 从 Spring MVC Controller 中检索 ModelMap 值到 html 中的 jquery

javascript - 立方体 Js |计算 2 个日期之间的差异

Javascript AJAX 请求 - 检查操作是否成功

javascript - 如何全局处理 fancybox 的 onClose 事件?

javascript - 使用 jquery 更改表替代行颜色?

php - 上传的图片没有出现在网络上

ruby-on-rails-3 - 导轨 3 : how to render text file in-line?

javascript - 仅使用 Angular-Material 切换 sidenav?

javascript - 使用 Javascript 正则表达式替换 "name"属性

file - 如何使用Golang在网络打印机上打印文件或格式文本