#javascript #java #json #ajax
Вопрос:
Я должен отправить сервлету два массива, я использую вызов Ajax POST, который отправляет объект JSON, а затем я должен прочитать данные, отправленные в двух списках или массивах в классе сервлета на java. Я предпочитаю не использовать jQuery для вызова Ajax. Я не очень хорошо знаком с json, я использовал некоторый код, найденный в stackoverflow, и я не могу понять, есть ли проблема с отправкой или анализом данных.
Вот метод для выполнения вызова Ajax в Javascript, где cback-это функция обратного вызова, метод = «POST», а url-адрес-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);
}
Вот метод doPost в контроллере сервлета, указанный в URL-адресе. Вот где я обнаружил проблему: после выполнения 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());
//...
}
Ответ №1:
Ваш ajax отправляет JSON, но ваш сервелет ожидает данные формы, в которых есть 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());
}