2012-04-18 15 views
18

Chcę przesłać dane do serwletu Java dla przetwarzania. Dane będą mieć zmienną długość i być w głównych par/wartość:

{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 } 

Dane nie musi być sformatowany w ten sposób, to jest po prostu jak mam go teraz.

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

Funkcja $.ajax() działa dobrze jak ja dostać ostrzeżenie za „Save Complete”. Mój dylemat znajduje się w serwecie. Jak mogę odzyskać dane? Próbowałem użyć HashMap tak ...

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

... ale hm okazuje się być null który Domyślam oznacza .getParameterMap() nie jest znalezienie pary klucz/wartość. Gdzie się mylę lub czego brakuje?

+1

Miałeś spojrzeć na jakie dane iw jaki sposób dane są przesyłane do serwera ? Nie sądzę, że 'myDataVar.toString()' jest tym, czego potrzebujesz. –

+0

Koncentruję dane do zmiennej łańcuchowej myDataVar, aby dane mogły być skonfigurowane tak, jak chcę. Mam to w ten sposób, ponieważ zrobiłem to samo w innym module, który działa dobrze.Jednak dane w tym module są nieco inne i używam domyślnego typu .ajax JQuery, który moim zdaniem jest GET. – iJared

Odpowiedz

31

Nie chcesz napisu, naprawdę potrzebujesz mapy JS par klucz-wartość. Na przykład zmienić:

data: myDataVar.toString(), 

z:

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 rozumie kluczowe pary wartości tak, to NIE zrozumieć wielki łańcuch. Przekazuje go po prostu jako ciąg znaków.

UPDATE: Poprawiony kod.

+0

Tak długo, jak serwer rozumie ciąg, jest w porządku ... –

+0

Myślę, że próbowałem to w jednej z moich prób powtórzenia. Moje pytanie dotyczące tego postu brzmi: jak uzyskać dane po stronie serwera? Powyższe instrukcje mieszające nie robią tego, co ja potrzebuję. – iJared

+0

Nawet po długim czasie pracy z żądaniami JSON i jQuery AJAX popełniłem dzisiaj głupi błąd, pisząc wartość parametru "dane" jako ciąg, a nie obiekt. Nie zdawałem sobie nawet sprawy, że zrobiłem to w ten sposób, dopóki nie zobaczyłem twojej odpowiedzi. Idzie, aby pokazać, że możesz przegapić problemy, które wpatrują się w twarz. Dzięki za bieganie mnie prosto. –

0

Nie wiem o Javie, ale w $ .ajax, jeśli przekażesz mapę obiektu taką jaka jest, (tzn. Usuniesz .toStrong()), a następnie będzie dostępna jak każdy wpis. Tak jak powiedziałem, nie wiem, jak to działa w Javie, ale w PHP jest to po prostu w tablicy $_POST jak każdy inny post.

0

Na razie wybieram inną trasę niż poprzednio podana. Zmieniłem sposób jestem Formatowanie danych:

&A2168=1&A1837=5&A8472=1&A1987=2 

Po stronie serwera używam getParameterNames(), aby umieścić wszystkie klucze język moduł wyliczający i następnie Iterowanie nad Enumerator i umieszczenie klucze i wartości do HashMap. Wygląda to mniej więcej tak:

Enumeration keys = request.getParameterNames(); 
HashMap map = new HashMap(); 
String key = null; 
while(keys.hasMoreElements()){ 
     key = keys.nextElement().toString(); 
     map.put(key, request.getParameter(key)); 
} 
0

Aby uzyskać wartość z serwletu z poleceniem POST, można wykonać podejście jak wyjaśniono na this post przy użyciu formatu request.getParameter(key) która będzie zwracać wartość, którą chcesz.

2

Prosta metoda wysyłania danych za pomocą skryptu java i wywołania ajex.

pierwsze prawo swoją postać jak ten

<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 cel logika na formularzu #frm_details id po wypełnij

$(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]