Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不间断ajax请求_Javascript_Ajax_Google Chrome - Fatal编程技术网

Javascript 不间断ajax请求

Javascript 不间断ajax请求,javascript,ajax,google-chrome,Javascript,Ajax,Google Chrome,有时,我必须使用AJAX来加载一个巨大的JSON负载(约20MB)。在这个过程中,浏览器窗口似乎一直在加载(最新的Chrome,Windows8.1)。用户可以单击一些东西,比如链接,但是在AJAX请求完成之前,浏览器实际上不会访问这些链接。这可能是一个问题,因为如果您转到一个需要这种AJAX调用的页面,很难导航到别处。不幸的是,此时我无法将有效负载的大小减少很多(我正在加载图形,有时图形是数十万个节点和边) 你知道为什么浏览器不会离开(即使浏览器是有响应的)吗?如果可能,还有什么潜在的解决方案

有时,我必须使用AJAX来加载一个巨大的JSON负载(约20MB)。在这个过程中,浏览器窗口似乎一直在加载(最新的Chrome,Windows8.1)。用户可以单击一些东西,比如链接,但是在AJAX请求完成之前,浏览器实际上不会访问这些链接。这可能是一个问题,因为如果您转到一个需要这种AJAX调用的页面,很难导航到别处。不幸的是,此时我无法将有效负载的大小减少很多(我正在加载图形,有时图形是数十万个节点和边)


你知道为什么浏览器不会离开(即使浏览器是有响应的)吗?如果可能,还有什么潜在的解决方案?谢谢

我不知道如何解决您所面临的确切技术问题。然而,这仍然是有用的。考虑谷歌或脸谱网,在那里你可以下载完整的档案作为档案,所有的历史和照片。记下他们是如何做到的(不是通过AJAX调用)。我相信他们之所以选择这种方式,是因为你也有同样的问题。想一想。

几个月前,我遇到了一个类似的问题。我找到了一个使用
setTimeout()
的解决方案,它在浏览器事件队列中创建了一个单独的事件。这基本上就是我所做的:

jQuery(document).ready(function() {

  setTimeout(function () {

    $.ajax({
      url: "/longAjaxCall",
      dataType: "json"
    }).done(function() {
      // do whatever ...
    });

  }, 0);

});

不确定您是否在使用jQuery,但不管基本原理如何,都是一样的

我建议使用an。浏览器支持不是很好,特别是对于IE

Web Worker是非阻塞的,这意味着您可以同时运行两个脚本。这将在后台进行AJAX调用时释放DOM


我最初会发送一个
MD5总和和一个
chunk number
来将数据分割成块。我会制作一个
js
脚本,缓慢地请求它们。然后加入它,稍后检查是否正确发送了完整的数据,并最终使用它。

我能想到的只有两件事,要么像上面很多人所说的那样,您的AJAX调用不是异步的,要么您可能已经用完了该浏览器可用的所有并行http连接线程。AJAX调用阻止了其中一个,因此根据您允许用户进行的其他交互,很可能是您在后台下载图像和脚本时遇到了问题,从而有效地阻止了用户向前移动,直到其中一个完成


20 MB确实是一个很大的数据块,所以我也同意其他人的看法,如果可能的话,也许你应该探索其他方法来实现你的需求。

你有没有想过把JSON分解成几部分?您还可以考虑将其流到像BinaryJS这样的东西中,并使用其中的一个扩展名,允许“流式JSON”在其中继续访问下载的解析JSON对象的元素。您使用同步Ajax吗?如果是这样,停止这样做。考虑:*将JSON分块*在数据大于X时打开单独的页面进行上传*上传是一种更节省大小的格式?是的,我考虑过这些事情。我更想知道是否有人知道它为什么会发生。因此,当ajax在本地处理如此大的文件时,当请求完成时,速度会非常慢。在网络上,速度似乎被拉长了,这让我相信浏览器正在处理多个“请求”上的有效负载,每个“请求”的开销都比我的本地机器大。只是一个想法。也许你可以选择尝试将返回的JSON压缩成g-zip。如果可能的话。或任何用于返回JSON的压缩系统。