Java servlet对JavaScript的响应

Java servlet response to JavaScript

本文关键字:响应 JavaScript servlet Java      更新时间:2023-11-18

我正试图让Java Servlet发送一些HTML,作为对JavaScript函数请求的响应。然而,当servlet函数被调用并且似乎正在发送响应时,Javascript函数只得到一个空字符串。

这里是Servlet方法:

String type = request.getParameter("type");
if(type.equals("locos")) {
            response.setContentType("text/html");
            //this prints out
            System.out.println("Responding with vehicle list");
            //deal with response
             PrintWriter out = response.getWriter();
             out.write("<p>test response</p>"); //finish
        }

这是JavaScript函数:

this.updateVehicleList = function () {
        var type = "locos";
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),true);
        xhr.send(null);
        //deal with response
        var res = xhr.responseText;
        //for testing
        if (res == "") {
            window.alert("I'm getting nothing");
        }
        view.showVehicleList(res);
    };

每次都会输出"我一无所获"的消息。如何让JavaScript实际接收Servlet的响应?

您正在进行异步请求,因此无法立即获得响应。您正试图在收到响应之前获取responseText

使用onreadystatechange事件:

...
...
xhr.send(null);
xhr.onreadystatechange = function () {
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200){
        //deal with response
        var res = xhr.responseText;
         //for testing
         if (res == "") {
            window.alert("I'm getting nothing");
         }
        view.showVehicleList(res);
    }
};

如果您打算发出同步请求,那么将第三个参数设置为false,您的原始代码就可以工作了。

xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),false);
//                                                         ^^^^^