Использование multipart/x-mixed-replace с XMLHttpRequest

Multipart/x-mixed-replace - это MIME-тип для контента, состоящего из нескольких частей, каждая из которых заменяет предыдущую часть. Это может быть использовано для реализации сервера push / reverse 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
...

На стороне клиента это код JavaScript, который я запускаю в Firefox:

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

Я ожидал, что каждый responseText заменит предыдущий, но кажется, что они фактически добавляются вместе. Размер responseText продолжает увеличиваться, поскольку сервер производит больше выходных данных. Есть ли способ получить только последнюю замененную деталь?

2 ответа

Решение

Это больше невозможно, так как поддержка была удалена из Firefox. См. https://bugzilla.mozilla.org/show_bug.cgi?id=843508

Как насчет хранения длины ответа после каждой части и использования ее в качестве смещения:

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();
Другие вопросы по тегам