Использование 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();