使用 Ajax 从 Servlet 中的 doGet 获取参数

Posted

技术标签:

【中文标题】使用 Ajax 从 Servlet 中的 doGet 获取参数【英文标题】:Getting parameter from a doGet in Servlet using Ajax 【发布时间】:2015-07-04 23:45:50 【问题描述】:

我想从我的 index.html 上设置的输入表单中获取参数:

GET:<br> 
<input type="text" size="20" id="name2" onblur="validate2()"  
     onFocus = "document.getElementById('msg2').innerHTML = ' '">
<div id = "msg">&nbsp</div>

在我的 servlet 上,我想通过 request.getparameter("name2") 获取此参数

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    System.out.println("Get");
    System.out.println(request.getParameter("name2"));
    if(!request.getParameter("name2").equals("")) 
        numer = request.getParameter("name2");
        serviceConnection(request, response);
    

但是当我启动我的应用程序时,system.out.println 只是打印空变量。

在我的 ajaxvalidator javascript 文件中,我写了这个:

function validate2() 
var idField = document.getElementById("name2");
var data = "name2=" + encodeURIComponent(idField.value);
if (typeof XMLHttpRequest != "undefined") 
    req = new XMLHttpRequest();
 else if (window.ActiveXObject) 
    req = new ActiveXObject("Microsoft.XMLHTTP");

var url = "Validator"
req.open("GET", url, true);
req.onreadystatechange = inserter2
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(data);



function inserter2() 
    if (req.readyState == 4) 
        if (req.status == 200) 
            var msg1 = req.responseText
            if (msg1 == "") 
                document.getElementById("msg").innerHTML = "<div style=\"color:red\">Wadliwa nazwa</div>";
                document.getElementById("org").value = '';
             else 
                document.getElementById("org").value = msg1;
            
        
    

如何解决这个问题?

【问题讨论】:

检查浏览器控制台是否有任何错误。还要在浏览器中检查发送到 servlet 的表单数据,检查值是否从那里发送。 @underdog,我编辑了我的问题并从我的 javascript 文件中添加了代码。 代码是你的servlet代码;我在任何地方都看不到 ajax 代码 @underdog 对,对不起 - 我的错 :) 如果值被发送到服务器,您是否在浏览器中检查过 【参考方案1】:

你的错误在这里:

req.open("GET", url, true);
// ...
req.send(data);

在 HTTP GET 中,数据需要在请求 URL 查询字符串中,而不是在请求正文中。在请求正文中发送数据仅适用于 POST。请求URL查询字符串是请求URL中?之后的部分。

所以,应该这样做:

req.open("GET", url + "?" + data, true);
// ...
req.send();

请注意,您可以删除请求正文内容类型标头。

另见:

doGet and doPost in Servlets Using java.net.URLConnection to fire and handle HTTP requests How to use Servlets and Ajax?

【讨论】:

以上是关于使用 Ajax 从 Servlet 中的 doGet 获取参数的主要内容,如果未能解决你的问题,请参考以下文章

在 AJAX 中处理 servlet 输出

从 Ajax 调用 servlet [重复]

如何使用一个ajax请求从java servlet返回多个json对象

从 servlet 更改元素的值并将数据返回到网页而不使用 ajax 刷新

从 servlet 获取数据到 JSP 并通过 ajax 再次将该数据发送到另一个 servlet

使用 Javascript 可以从 HTML 页面中的 servlet 设置的会话属性中获取值吗