ajax将带有两个数组的json对象发送到一个servlet,并在Javaservlet中解析,而不使用jquery

0mkxixxg  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(186)

我必须向servlet发送两个数组,我使用一个发送json对象的ajax post调用,然后我必须读取java中servlet类中两个列表或数组中发送的数据。我不喜欢在ajax调用中使用jquery。我对json不是很熟悉,我使用了stackoverflow中的一些代码,我不明白在发送或解析数据时是否有问题。
下面是在javascript中进行ajax调用的方法,其中cback是回调函数,method=“post”,url是servlet的url:

function makeCall(method, url, from, to, cback) {
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() {
        cback(req)
    }; 
    req.open(method, url);

    var obj = {};
    obj["from"] = from;
    obj["to"] = to;
    var data = JSON.stringify(obj);
    req.send(data);

}

下面是url指定的servlet控制器中的dopost方法。这里是我发现问题的地方:在执行getparameter之后,字符串json1和json2为空:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

       //...

       String json1 = request.getParameter("from");
       String json2 = request.getParameter("to");

       Gson gson = new Gson();
       ArrayList<Double> listFrom = gson.fromJson(json1,
                new TypeToken<ArrayList<Categoria>>() {}.getType());

       ArrayList<Double> listTo = gson.fromJson(json2,
                new TypeToken<ArrayList<Double>>() {}.getType());

      //...
}
wqsoz72f

wqsoz72f1#

您的ajax正在发送json,但您的servelet需要表单数据,其中包含json。
要像服务器期望的那样发送数据,请将每个数组编码为json并将其作为表单数据发送

function makeCall(method, url, from, to, cback) {
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() {
        cback(req)
    }; 
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.open(method, url);

    var params = new URLSearchParams({to: JSON.stringify(to), from: JSON.stringify(from)});
    req.send(params.toString());            
}

相关问题