Java servlet 对 JavaScript 的响应 [重复]

Posted

技术标签:

【中文标题】Java servlet 对 JavaScript 的响应 [重复]【英文标题】:Java servlet response to JavaScript [duplicate] 【发布时间】:2016-07-22 22:53:20 【问题描述】:

我正在尝试让 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 的响应?

【问题讨论】:

相关:How to use Servlets and Ajax? 【参考方案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);
//                                                         ^^^^^

【讨论】:

那行得通。谢谢。

以上是关于Java servlet 对 JavaScript 的响应 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

在 java servlet 中包含 javascript 的最佳方法

纯 Javascript fetch() 方法到 java Servlet,我如何获取和传递数据?

javaee三大组件是啥