Nginx Upload Progress module-本地实例和Web服务器上不同的XMLHttpRequest行为
嗨,我基本上是在做一个上传程序,并使用nginx上传进度模块。我不明白的是,为什么它在本地主机上的本地机器上运行良好(提供XMLHttpRequest readyState 4,javascript进度条相应增加),但当我将它部署到服务器上时,似乎无法获得任何服务器响应(尽管它显然连接到/progress,但一直提供XMLHttpRequest readyState 1) 只需遵循通常的nginx上传进度模块代码:Nginx Upload Progress module-本地实例和Web服务器上不同的XMLHttpRequest行为,nginx,upload,xmlhttprequest,uwsgi,Nginx,Upload,Xmlhttprequest,Uwsgi,嗨,我基本上是在做一个上传程序,并使用nginx上传进度模块。我不明白的是,为什么它在本地主机上的本地机器上运行良好(提供XMLHttpRequest readyState 4,javascript进度条相应增加),但当我将它部署到服务器上时,似乎无法获得任何服务器响应(尽管它显然连接到/progress,但一直提供XMLHttpRequest readyState 1) 只需遵循通常的nginx上传进度模块代码: function fetch(uuid) { req = new XML
function fetch(uuid) {
req = new XMLHttpRequest();
req.open("GET", "/progress", true);
req.setRequestHeader("X-Progress-ID", uuid);
req.onreadystatechange = function () {
/* checking the state here ..*/
console.log(req.readyState);
console.log(req.status);
if (req.readyState == 4) {
if (req.status == 200) {
/* poor-man JSON parser */
var data = eval(req.responseText);
console.log(data.state);
if (data.state == 'done' || data.state == 'uploading') {
prog = Math.floor(100 * (data.received / data.size));
$("#progressbar").progressbar({value: prog});
$("#percentage").html(prog+"%");
}
if (data.state == 'done' || data.received >= data.size) {
window.clearTimeout(timeout);
}
}
}
}
req.send(null);
};
以下是控制台日志:
对于本地nginx实例,OK
[22:12:25.734] POST http://localhost:8080/?X-Progress-ID=5b8702050a784e6604953201e398c99a [HTTP/1.1 200 OK 1335ms]
[22:12:25.677] "initialized"
[22:12:25.838] GET http://localhost:8080/progress [HTTP/1.1 200 OK 0ms]
[22:12:25.783] 2
[22:12:25.783] 200
[22:12:25.784] 3
[22:12:25.784] 200
[22:12:25.784] 4
[22:12:25.784] 200
[22:12:25.784] "uploading"
测试服务器不正常
[00:16:20.638] POST http://00.mydomain.com/?X-Progress-ID=c65681d605911db0b8da3fb0e436d851 [HTTP/1.1 200 OK 2925ms]
[00:16:20.582] "initialized"
[00:16:20.738] GET http://00.mydomain.com/progress [HTTP/1.1 200 OK 293ms]
[00:16:21.039] GET http://00.mydomain.com/progress [HTTP/1.1 200 OK 304ms]
[00:16:20.979] 1
[00:16:20.979] 0
[00:16:20.979] 1
[00:16:20.979] 0
[00:16:20.979] 1
[00:16:20.980] 0
[00:16:21.341] GET http://00.mydomain.com/progress [HTTP/1.1 200 OK 304ms]
[00:16:21.286] 1
[00:16:21.286] 0
[00:16:21.287] 1
[00:16:21.287] 0
[00:16:21.287] 1
[00:16:21.287] 0
...keeps repeating till upload complete...
有任何关于我的错误可能在哪里的线索吗?原来是GET请求到/progress的异步/同步问题。。。仍然在研究这个问题,以便我可以使用async,但基本上当我改变
req.open("GET", "/progress", true);
到
它开始在我的服务器上工作
**更新**:这是一个愚蠢的打字错误/剪切粘贴错误,应该是
var req = new XMLHttpRequest();
因此,js错误在本地和服务器实例上的行为不同,有时会被忽略。。。现在异步上传过程(带有进度条和可恢复)可以正常工作了
**旁注**:主Nginx wiki上的json解析示例
var data = eval(req.responseText);
确实不安全,但是我注意到nginx上传进度模块返回了格式错误的JSON,如
({ "state" : "uploading", "received" : 8671, "size" : 2218274 });
这样做会更好
/* non-poor-man JSON Parser */
var response = req.responseText;
var jsonlen = response.length;
var jsondata = response.slice(1, jsonlen-4); //note returned json is malformed
var data = JSON.parse(jsondata);
/* non-poor-man JSON Parser */
var response = req.responseText;
var jsonlen = response.length;
var jsondata = response.slice(1, jsonlen-4); //note returned json is malformed
var data = JSON.parse(jsondata);