【问题标题】:Using multipart/x-mixed-replace with XMLHttpRequest将 multipart/x-mixed-replace 与 XMLHttpRequest 一起使用
【发布时间】:2013-12-02 02:02:31
【问题描述】:

Multipart/x-mixed-replace 是一种 MIME 类型,用于具有多个部分的内容,每个部分替换前一部分。这可以用来实现服务器推送/反向 ajax/comet,显然至少应该在 Firefox 中工作。为了测试这一点,我设置了一个服务器,它产生以下输出,每个部分之间有延迟:

HTTP/1.1 200 OK
Content-type: multipart/x-mixed-replace; boundary=whatever

--whatever
Content-type: text/plain

tick

--whatever
Content-type: text/plain

tock

--whatever
...

在客户端,这是我在 Firefox 中运行的 JavaScript 代码:

var r = new XMLHttpRequest();
r.multipart = true;
r.open('GET', '/', true);
r.onreadystatechange = function () {
    console.log(r.responseText.length);
};
r.send();

我希望每个 responseText 都替换前一个,但似乎它们实际上是附加在一起的。随着服务器产生更多输出,responseText 的大小会不断增加。有没有办法只获得最新更换的零件?

【问题讨论】:

    标签: javascript xmlhttprequest comet multipart-mixed-replace


    【解决方案1】:

    这不再可能,因为支持已从 Firefox 中删除。见https://bugzilla.mozilla.org/show_bug.cgi?id=843508

    【讨论】:

      【解决方案2】:

      如何在每个部分之后存储响应长度,并将其用作偏移量:

      var offset = 0;
      var r = new XMLHttpRequest();
      r.multipart = true;
      r.open('GET', '/', true);
      r.onreadystatechange = function () {
          var latestPart = r.responseText.substring(offset) 
          offset = r.responseText.length;
      };
      r.send();
      

      【讨论】:

      • 感谢您查看我的问题。由于这是 x-mixed-replace,我认为它应该只自动显示最新的部分,我怀疑我从服务器发送的内容或我的 XMLHttpRequest 代码可能有问题。
      猜你喜欢
      • 2011-01-29
      • 2017-03-04
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多