javascript - Ajax将带有两个数组的JSON对象发送到servlet并在没有jQuery的java servlet中解析

标签 javascript java json ajax

我必须向 servlet 发送两个数组,我使用发送 JSON 对象的 Ajax POST 调用,然后我必须读取 java 中 servlet 类中的两个列表或数组中发送的数据。 我不喜欢使用 jQuery 进行 Ajax 调用。 我对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 Controller 中的doPost方法。这是我发现问题的地方:执行 getParameter 后,字符串 json1 和 json2 为 null:

       
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());
                
      //...
}

最佳答案

您的ajax正在发送JSON,但您的servlet需要表单数据,其中包含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());            
}

关于javascript - Ajax将带有两个数组的JSON对象发送到servlet并在没有jQuery的java servlet中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68330166/

相关文章:

javascript - 使用 JavaScript 解析 JSON 数组并返回所选部分

javascript - keyup 事件重置输入字段

javascript - 如何根据一项选择创建多个动态选择框?

javascript - HTML:name 和 id 属性总是可以使用相同的标识符吗?

java - 有时在 exoplayer 中的视频缓冲速度很慢?

java - 尝试从 Json Web 响应获取 Json 节点时出错

javascript - 使用 Express 和 HTTPS.get 或 HTTPS.request 的最佳方式

java - 为什么我不能在构造函数中调用非静态方法作为 this 参数?

java - 无限垂直世界

java - Hibernate:Criteria 和 createSQLQuery:如何获取正确的 JSON?