代码之家  ›  专栏  ›  技术社区  ›  TheProgrammer

为什么我的AJAX请求返回空?

  •  0
  • TheProgrammer  · 技术社区  · 7 年前

    我已经看了:

    Failed to load resource: net::ERR_EMPTY_RESPONSE http://test.com

    Failed to load resource under Chrome

    Failed to load resource: net::ERR_EMPTY_RESPONSE when console not opened

    Failed to load resource: net::ERR_EMPTY_RESPONSE


    错误:

    未能加载资源:net::ERR\u EMPTY\u响应


    代码:

    客户

    var load = 0;
    
        $( document ).ready(function() {
            if (load == 0) {
                load++;
                $.ajax({
                    type: "POST",
                    url: "/1/2",
                    data: someData,
                }).done(function(response) {
                    console.log("RESPONSE :"+response);
                    if (response.charAt(0) == "F") {
                        localStorage.setItem("error_msg_local", response);
                    } else if (response.charAt(0) == "L") {
                        localStorage.setItem("success_msg_local",response);
                    } else {
                        localStorage.setItem("error_msg_local", "Internal error. Please try again.");
                    }
                });
            }
        });
    

    服务器

    请求随POST一起发送,并将等待用户完成特定操作。如果用户什么也不做,120秒后会记录“否”,并发送“F”作为响应。

    router.post("/2", function(req, res, next){
    
            request.post({
                url: 'URL:Port',
                json: {  
                  JsonData: JsonData,  
                  timeout: "120000"  
                }
            },
            function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    if (body.status == "success") {
                        //User completed action within 120 seconds, so do stuff
                    }
                    else {
                        //120 elapsed without user completing action, body.status == "nothing", so execute this:
                        console.log("NO");
                        res.send("F");
                    }
                }
                else {
                    console.log("ERROR: "+error);
                }
            });
    });
    

    问题:

    我故意等待120秒来测试我的代码。客户端上没有任何记录,但服务器上没有记录“NO”,因此我知道res.send(“F”)应该作为响应发送。

    然而,我在浏览器控制台中收到一条错误消息“加载资源失败:net::ERR\u EMPTY\u RESPONSE”,但什么也没有发生。

    以下是在我的终端中注销的所有内容(服务器日志):

    POST /1/2 - - ms - -
    NO
    POST /1/2 - - ms - -
    NO
    

    奇怪的是,虽然我只调用过一次,但请求似乎被触发了多次?

    我甚至添加了一个负载计数器来确保它只被调用一次,但它似乎被调用了两次。

    我应该怎样做才能只有一个AJAX请求,并从我的服务器获得正确的响应?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ryan Hanekamp    7 年前

    错误描述中有--空响应。您的服务器收到并记录了请求,但未发送任何响应。浏览器可能会拒绝响应,例如CORS的响应,但我希望在这种情况下会出现不同的错误消息。

    您是否有其他方法来测试URL,例如cUrl?我使用了一点Fiddler来监控和操纵网络流量,这可能会更容易。在重新访问客户端代码之前,请排除服务器。