Nginx Upload Progress module-本地实例和Web服务器上不同的XMLHttpRequest行为

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

嗨,我基本上是在做一个上传程序,并使用nginx上传进度模块。我不明白的是,为什么它在本地主机上的本地机器上运行良好(提供XMLHttpRequest readyState 4,javascript进度条相应增加),但当我将它部署到服务器上时,似乎无法获得任何服务器响应(尽管它显然连接到/progress,但一直提供XMLHttpRequest readyState 1)

只需遵循通常的nginx上传进度模块代码:

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);