JQuery $.ajax() post - данные в сервлете Java
Я хочу отправить данные сервлету Java для обработки. Данные будут иметь переменную длину и находиться в парах ключ / значение:
{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }
Данные не должны быть отформатированы таким образом, это просто, как у меня сейчас.
var saveData = $.ajax({
type: "POST",
url: "someaction.do?action=saveData",
data: myDataVar.toString(),
dataType: "text",
success: function(resultData){
alert("Save Complete");
}
});
saveData.error(function() { alert("Something went wrong"); });
$.ajax()
Функция работает нормально, так как я получаю предупреждение "Сохранить завершено". Моя дилемна на сервлете. Как мне получить данные? Я пытался использовать HashMap, как это...
HashMap hm = new HashMap();
hm.putAll(request.getParameterMap());
...но hm
оказывается нулевым, который я предполагаю, означает, что .getParameterMap()
не находит пары ключ / значение. Куда я иду не так или чего мне не хватает?
6 ответов
Вам не нужна строка, вам действительно нужна JS-карта пар ключ-значение. Например, изменить:
data: myDataVar.toString(),
с:
var myKeyVals = { A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }
var saveData = $.ajax({
type: 'POST',
url: "someaction.do?action=saveData",
data: myKeyVals,
dataType: "text",
success: function(resultData) { alert("Save Complete") }
});
saveData.error(function() { alert("Something went wrong"); });
jQuery понимает пары ключ-значение, как это, он НЕ понимает большую строку. Он передает это просто как строку.
ОБНОВЛЕНИЕ: Код исправлен.
Простой метод отправки данных с использованием сценария Java и вызова AJEX.
Сначала исправьте свою форму, как это
<form id="frm_details" method="post" name="frm_details">
<input id="email" name="email" placeholder="Your Email id" type="text" />
<button class="subscribe-box__btn" type="submit">Need Assistance</button>
</form>
целевая логика java script с идентификатором формы #frm_details после sumbit
$(function(){
$("#frm_details").on("submit", function(event) {
event.preventDefault();
var formData = {
'email': $('input[name=email]').val() //for get email
};
console.log(formData);
$.ajax({
url: "/tsmisc/api/subscribe-newsletter",
type: "post",
data: formData,
success: function(d) {
alert(d);
}
});
});
})
General
Request URL:https://test.abc
Request Method:POST
Status Code:200
Remote Address:13.76.33.57:443
From Data
email:abc@invalid.ts
вы можете использовать сообщение ajax как:
$.ajax({
url: "url",
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ name: 'value1', email: 'value2' }),
success: function (result) {
// when call is sucessfull
},
error: function (err) {
// check the err for error details
}
}); // ajax call closing
Я не знаю о Java, но в $.ajax, если вы передаете карту объекта, как есть (т.е. удалить .toStrong()
) и тогда это доступно как любой пост. Как я уже сказал, я не знаю, как это работает в Java, но в PHP, это просто в $_POST
массив, как и любой другой пост.
В настоящее время я иду другим путем, чем я говорил ранее. Я изменил способ форматирования данных:
&A2168=1&A1837=5&A8472=1&A1987=2
На стороне сервера я использую getParameterNames(), чтобы поместить все ключи в Enumerator, а затем перебрать Enumerator и поместить ключи и значения в HashMap. Это выглядит примерно так:
Enumeration keys = request.getParameterNames();
HashMap map = new HashMap();
String key = null;
while(keys.hasMoreElements()){
key = keys.nextElement().toString();
map.put(key, request.getParameter(key));
}
Чтобы получить значение из сервлета из POST
Команда, вы можете следовать подходу, как описано в этом посте, используя request.getParameter(key)
формат, который вернет значение, которое вы хотите.