使用multipart / x-mixed-replace和XMLHttpRequest

时间:2013-12-02 02:02:32

标签: javascript xmlhttprequest comet multipart-mixed-replace

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的大小不断增加。有没有办法只获得最新更换的部件?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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();