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

时间:2011-02-25 23:45:50

标签: javascript jquery text get

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

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

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

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

谢谢

2 个答案:

答案 0 :(得分:9)

  

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

要检索资源的一部分(或块),请使用HTTP Range header。大多数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调用来学习资源的长度,这将告诉您可以使用的范围内的最大索引。

答案 1 :(得分:0)

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

来自jquery docs:

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

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

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

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