【问题标题】:How to keep google-chrome from buffering如何防止谷歌浏览器缓冲
【发布时间】:2019-04-24 11:08:58
【问题描述】:

我有一种情况,当我在 php 页面中单击按钮时调用 js 函数,会显示一个隐藏的对话框,并且在发出一系列生成 SQL 语句的同步 ajax 调用之前在对话框中绘制一些数据服务器端。这个过程可能会在一个循环中重复,这是同步 ajax 的原因,因为如果 ajax 调用返回某种错误,则需要中断循环。

我的问题是 Chrome 不会在 ajax 调用之前显示数据,而 firefox 会。我尝试将 jqXHR 对象的 contentType 方法设置为“application/octet-stream”,但没有成功。

这里是 ajax 代码:

 $.ajax({
    async : false,
    url : "url",
    method : "GET", // redudntant, GET is the default
    dataType : "text",
    beforeSend : function(xhr) {
        xhr.overrideMimeType("application/octet-stream;");
    },
    success : function(data) {
        // do stuff with data
    }
}).fail(function(xhr, status, error) {
    // do stuff with error
});

【问题讨论】:

  • 这个过程可能会在一个循环中重复,这是同步 ajax 的原因,因为如果 ajax 调用返回某种错误,则需要中断循环。嗯?异步调用可以中止,并且可以有error 回调。
  • 对,但正如我所指出的,ajax 调用必须在循环重复之前返回其数据。不仅如此,用户也不知道发生了什么,因为 chrome 不允许显示任何内容。服务器端进程可能需要一些时间才能完成,所以我需要展示一些东西,否则他会认为它被冻结了。 Firefox 不这样做。我添加到 div 的 innerHTML 的任何内容都会立即出现。
  • 所以,根本不要使用循环。使用常规的异步 AJAX 调用并将循环代码分离到它自己的函数中。然后,在成功回调中,调用曾经是循环体的函数。然后,浏览器不会变得无响应,并且在前一个任务完成之前您不会执行下一个任务。
  • 很好的建议,但它没有回答问题的要点:为什么 chrome 的行为与 firefox 不同?是否由于缓冲(我在某处读到 chrome 在显示前缓冲 1K),如果是这样,如何克服?在我重构我的逻辑之前,我想要一个答案。

标签: javascript ajax google-chrome firefox mime-types


【解决方案1】:

这不是我最初问题的答案,但鉴于没有人能够回答它,甚至没有人能够给我建议或指出正确的方向,我完全重写了我的代码,以消除依赖 ajax 的客户端代码用于服务器端处理。我的解决方案几乎完全依赖于服务器端代码,只有最少的客户端仅限于消息传递和信息视觉效果,并且没有 ajax。社区没有提供任何解决方案的事实令人非常失望,因为我开始依赖 stackoverflow 来获取建议和示例。它引出了一个问题:是没有人知道答案还是被认为已回答?

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2016-02-11
    • 2014-10-30
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多