【问题标题】:Servlet with Ajax - POST works, but GET does not带有 Ajax 的 Servlet - POST 有效,但 GET 无效
【发布时间】:2015-07-04 17:07:01
【问题描述】:

我正在制作一个可以计算公式中数字的应用程序。在 html 中我放了这个:

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

我创建了一个 javascript,它首先验证数据,然后将它们插入到“答案公式”中:

function validate2() {
var idField2 = document.getElementById("number2");
var data2 = "number2=" + encodeURIComponent(idField2.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(data2);
}

function inserter2() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var msg1 = req.responseText
            if (msg1 == "") {
                document.getElementById("message1").innerHTML = "<div style=\"color:red\">Zła nazwa</div>";
                document.getElementById("org").value = ''
            }
            else
                document.getElementById("org").value = msg2
        }
    }
}

这是我的代码,将其作为 doGet 发送:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("GET");

    response.setContentType("text/html");
    Writer out = response.getWriter();
    String num2 = request.getParameter("number2");
    System.out.println(num2);
    String org = new String();
    if(num2.matches("[\\p{Punct}\\d]+")) {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        try {
            org = engine.eval(num2).toString() + " (" + request.getMethod() + ")";
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    out.write(org != null ?  org : "");
}

如果我们把所有这些东西都改成 Post,这段代码就可以工作了,但是现在有了 GET,它就完全不工作了。另一个奇怪的情况是,带POST的公式可以读取公式中写的东西,但是当我们使用GET时,程序看到公式源为空。

【问题讨论】:

    标签: java javascript ajax servlets


    【解决方案1】:

    如果以get方式发送,则需要将公式放入请求中。这个表达式:

    req.send(data2);
    

    当您发送 GET 请求时没有意义,因为 GET 请求不能包含除请求字符串之外的任何有效负载。因此,您必须将有效负载添加到您的网址。像这样的:

    var url = "Validator/?" + data2;
    req.open("GET", url, true);        
    req.onreadystatechange = inserter2;
    req.send();
    

    希望对您有所帮助。

    【讨论】:

    • 我已经检查了你的代码,但它对我不起作用:(还是同样的问题。
    • 你能在 github 上分享你的应用程序或其他东西,以便我可以玩吗?我无法重现该问题,也许它隐藏在代码中的某个位置,而问题未在问题中列出。
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2017-10-16
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多