我一直很难用PHP编写websockets,所以我决定尝试下载一个数据流。 它可以工作,我可以在不同的时间获取内容,解析并使用它,但整个响应都保存在内存中......
有没有办法在onreadystatechange
函数中每次重置请求的响应? (评论的地方)
删除评论,我收到此错误:
test.html:20 Uncaught TypeError:无法分配给只读属性 对象'#'的'responseText'
流媒体的工作代码:
class HTTPStream {
constructor(url, callback, error) {
this.request = new XMLHttpRequest();
var previous_text = '';
if (typeof error === "function")
this.request.onerror = error;
this.request.onreadystatechange = () => {
if (this.request.readyState > 2) {
var new_response = this.request.responseText.substring(previous_text.length);
if(new_response != "") {
var result = JSON.parse(new_response);
callback(result);
}
previous_text = this.request.responseText;
//this.request.responseText = "";
}
};
this.request.open("GET", url, true);
this.request.send();
}
cancel() {
this.request.abort();
}
}
new HTTPStream('test.php', (m) => console.log(m));
修改
通过建议,我尝试了this,但不幸的是你可以将它设置为只写一次,就是这样。我有很多输出,而不仅仅是一次。