Java servlet对JavaScript的响应

时间:2016-04-03 11:49:01

标签: javascript java servlets xmlhttprequest

我试图让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);
    };

&#34;我什么都没得到&#34;每次消息输出。如何让JavaScript实际从Servlet接收响应?

1 个答案:

答案 0 :(得分:1)

您正在发出异步请求,因此无法立即获得响应。您甚至在收到回复之前尝试获取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);
//                                                         ^^^^^
相关问题