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

标签 java javascript ajax servlets

我想从我的 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;
            }
        }
    }

如何解决这个问题?

最佳答案

你的错误在这里:

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

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

所以,应该这样做:

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

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

另见:

关于java - 使用 Ajax 从 Servlet 中的 doGet 获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880224/

相关文章:

javascript - 显示适用于移动网络的 Facebook Audience Network 原生广告

c++ - 如何使 C++ 实时服务器应用程序保持现代 Web 客户端界面?

java - 图像比较技术与 Java

java - 在这种情况下如何避免在转换为泛型时发出警告?

javascript - 如何使用angularJS在kendo UI中单击堆叠条形图获取特定堆叠的颜色

javascript - D3 v4 .rangeBand() 等效项

javascript - 数据过滤器在 ajax 中不起作用

php - Ajax post 请求作为空对象被接收

java - AntiSamy 策略文件在 Web 项目中的位置

java - Java中通过使用反射来访问和修改私有(private)类成员