Вопрос по javascript, ajax, hashmap, jquery – JQuery $ .ajax () post - данные в сервлете Java

27

Я хочу отправить данные сервлету Java для обработки. Данные будут иметь переменную длину и находиться в парах ключ / значение:

<code>{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }
</code>

Данные не нужно форматировать таким образом, просто они у меня есть сейчас.

<code>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"); });
</code>

$.ajax() Функция работает нормально, так как я получаю оповещение для & quot; Сохранить завершено & quot ;. Моя дилемна на сервлете. Как мне получить данные? Я пытался использовать HashMap, как это ...

<code>HashMap hm = new HashMap();
hm.putAll(request.getParameterMap());
</code>

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

Вы смотрели, какие данные и как данные отправляются на сервер? Я не думаюmyDataVar.toString() это то, что вы хотите. Felix Kling
Я объединяю данные в строковую переменную myDataVar, чтобы данные могли быть настроены так, как я хочу. У меня так, потому что я сделал то же самое в другом модуле, который работает нормально. Тем не менее, данные в этом модуле немного отличаются, и я использую по умолчанию тип JQuery .ajax, который я считаю GET. iJared

Ваш Ответ

5   ответов
0

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

0

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

0

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

  &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

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 в идентификаторе формы #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]
46

вам действительно нужна 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: Код исправлен.

Пока сервер понимает строку, все в порядке ...
Я думаю, что попробовал это в одной из моих попыток итерации. Мой вопрос с этим постом, как я могу получить данные на стороне сервера? Вышеприведенные операторы hashmap не выполняют то, что мне нужно. iJared
Даже после долгой работы с JSON и JQuery AJAX-запросами, сегодня я допустил глупую ошибку, записав свое значение для «данных». параметр в виде строки, а не объекта. Я даже не осознавал, что сделал это таким образом, пока не увидел твой ответ. Идет, чтобы показать, что вы можете пропустить проблемы, которые смотрят вам в лицо. Спасибо за пробежку.

Похожие вопросы