Подтвердить что ты не робот

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() работает нормально, так как я получаю предупреждение для "Save Complete". Моя дилемна находится на сервлете. Как получить данные? Я попытался использовать HashMap, как это...

HashMap hm = new HashMap();
hm.putAll(request.getParameterMap());

... но hm оказывается нулевым, что я предполагаю, означает, что .getParameterMap() не находит пары ключ/значение. Где я ошибаюсь или что мне не хватает?

4b9b3361

Ответ 1

Вам не нужна строка, вам действительно нужна карта ключей ключевых значений 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 понимает пары ключевых значений, подобных этому, он НЕ понимает большую строку. Он передает его просто как строку.

UPDATE: Исправлен код.

Ответ 2

Простой способ отправки данных с помощью java script и 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> 

Целевая логика javascript в форме id #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:[email protected]

Ответ 3

Я не знаю о Java, но в $.ajax, если вы передаете карту объекта как есть, (то есть удалите .toStrong()), а затем она будет доступна, как и любая запись. Как я уже сказал, я не знаю, как это работает на Java, но в PHP это просто в массиве $_POST, как и любое другое сообщение.

Ответ 4

В настоящее время я иду другим путем, чем я говорил ранее. Я изменил способ форматирования данных:

  &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)); 
}

Ответ 5

Чтобы получить значение из сервлета из команды POST, вы можете следовать подходу, описанному в этом сообщении, используя формат request.getParameter(key), который вернет значение, которое вы хотите.