XMLHttpRequest onprogress Uncaught SyntaxError: Invalid or unexpected token
XMLHttpRequest onprogress Uncaught SyntaxError: Invalid or unexpected token
我有一个有效的 ajax 函数
但是当我使用 onprogress 时,我有时会返回一半 html 并且控制台显示 Uncaught SyntaxError: Invalid or unexpected token
但我仍然继续。
这里是函数
function xhrAJAX ( divID , param2 ) {
var pcache = (Math.floor(Math.random() * 100000000) + 1);
var params = "divID="+encodeURIComponent(divID)+"¶m2="+encodeURIComponent(param2);
var xhr = new XMLHttpRequest(); xhr.open("POST", "/file.php?pcache="+pcache, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onprogress = function(e) { $("#"+divID).html(e.currentTarget.responseText) ; }
xhr.send(params);
}
***** 我知道如果我将 .onprogress 更改为 xhr.onreadystatechange = function(e) { if (xhr.readyState == 4) { $("#"+divID).html(e.currentTarget.responseText) ; } }
我将不会出现控制台错误....但有时,php 中发生的事情需要执行时间很长,想显示进度。
我的 PHP8 配置了没有输出缓冲区的 NGINX,所以如果我这样做 echo 'stuff'; sleep(3); echo '2';
我看到 'stuff' 然后 3 秒后看到 '2' 出现。
请注意:这里描述的 php 部分不是问题。
问题:有没有办法避免在进行中(在 javascript 侧)出现“返回一半 html”?
我找到了新的 javascript 替换提取。通过一些挖掘,我想出了这个 streamble html
它也适用于网络视图 android 和 IOS ;)
在这个场景中,我有 PHP 8 和输出缓冲区关闭的 NGINX,因此在继续执行的同时推送每个 echo....
function fetchsrteam ( divid , sub , buttonid ) {
var pcache = (Math.floor(Math.random() * 100000000) + 1);
var postix = [];
postix["preventCache"] = pcache;
postix["divid"] = encodeURIComponent(divid);
postix["buttonid"] = encodeURIComponent(buttonid);
fetch("/.........php?pcache="+pcache, {
method: "POST",
body: JSON.stringify(Object.assign({}, postix)),
headers: {"Content-type": "application/json; charset=UTF-8"}
}).then(response => response.body)
.then(rb => {
const reader = rb.getReader();
return new ReadableStream({
start(controller) {
function push() {
reader.read().then( ({done, value}) => {
if (done) {
console.log('done', done); controller.close(); return;
}
controller.enqueue(value); $("#"+divid).append(new TextDecoder().decode(value)); push();
})
}
push();
}
});
});
}
我有一个有效的 ajax 函数
但是当我使用 onprogress 时,我有时会返回一半 html 并且控制台显示 Uncaught SyntaxError: Invalid or unexpected token
但我仍然继续。
这里是函数
function xhrAJAX ( divID , param2 ) {
var pcache = (Math.floor(Math.random() * 100000000) + 1);
var params = "divID="+encodeURIComponent(divID)+"¶m2="+encodeURIComponent(param2);
var xhr = new XMLHttpRequest(); xhr.open("POST", "/file.php?pcache="+pcache, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onprogress = function(e) { $("#"+divID).html(e.currentTarget.responseText) ; }
xhr.send(params);
}
***** 我知道如果我将 .onprogress 更改为 xhr.onreadystatechange = function(e) { if (xhr.readyState == 4) { $("#"+divID).html(e.currentTarget.responseText) ; } }
我将不会出现控制台错误....但有时,php 中发生的事情需要执行时间很长,想显示进度。
我的 PHP8 配置了没有输出缓冲区的 NGINX,所以如果我这样做 echo 'stuff'; sleep(3); echo '2';
我看到 'stuff' 然后 3 秒后看到 '2' 出现。
请注意:这里描述的 php 部分不是问题。
问题:有没有办法避免在进行中(在 javascript 侧)出现“返回一半 html”?
我找到了新的 javascript 替换提取。通过一些挖掘,我想出了这个 streamble html
它也适用于网络视图 android 和 IOS ;)
在这个场景中,我有 PHP 8 和输出缓冲区关闭的 NGINX,因此在继续执行的同时推送每个 echo....
function fetchsrteam ( divid , sub , buttonid ) {
var pcache = (Math.floor(Math.random() * 100000000) + 1);
var postix = [];
postix["preventCache"] = pcache;
postix["divid"] = encodeURIComponent(divid);
postix["buttonid"] = encodeURIComponent(buttonid);
fetch("/.........php?pcache="+pcache, {
method: "POST",
body: JSON.stringify(Object.assign({}, postix)),
headers: {"Content-type": "application/json; charset=UTF-8"}
}).then(response => response.body)
.then(rb => {
const reader = rb.getReader();
return new ReadableStream({
start(controller) {
function push() {
reader.read().then( ({done, value}) => {
if (done) {
console.log('done', done); controller.close(); return;
}
controller.enqueue(value); $("#"+divid).append(new TextDecoder().decode(value)); push();
})
}
push();
}
});
});
}