web-dev-qa-db-fra.com

JQuery $ .ajax () post-data dans un servlet Java

Je souhaite envoyer des données à un servlet Java pour traitement. Les données auront une longueur variable et seront en paires clé/valeur:

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

Les données n'ont pas besoin d'être formatées de cette façon, c'est simplement comment je les ai maintenant.

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

La fonction $.ajax() fonctionne correctement car je reçois une alerte pour "Enregistrer le fichier terminé". Mon dilemne est sur le servlet. Comment récupérer les données? J'ai essayé d'utiliser un HashMap comme ça ...

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

... mais hm s'avère nul, ce qui, je suppose, signifie que .getParameterMap() ne trouve pas les paires clé/valeur. Où est-ce que je vais mal ou qu'est-ce qui me manque?

26
iJared

Vous ne voulez pas de chaîne, vous voulez vraiment une carte JS de paires clé-valeur. Exemple: changement:

 data: myDataVar.toString(),

avec: 

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 comprend les paires de valeurs de clé comme ça, il ne comprend pas une grande chaîne. Il le passe simplement comme une chaîne.

UPDATE: Code corrigé.

45
aquinas

Méthode simple d'envoi de données à l'aide d'un script Java et d'un appel ajex.

D'abord droit votre formulaire comme ça 

<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> 

cible logique javascript sur le formulaire id #frm_details after 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]
5
Harish Verma

Pour obtenir la valeur du servlet à partir de la commande POST, vous pouvez suivre l'approche décrite dans this post en utilisant le format request.getParameter(key) qui renverra la valeur souhaitée.

0
atjua

Pour le moment, je vais suivre un itinéraire différent de celui que j'ai déjà indiqué. J'ai changé la façon dont je formate les données pour:

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

Du côté du serveur, j'utilise getParameterNames () pour placer toutes les clés dans un énumérateur, puis itérer sur celui-ci et placer les clés et les valeurs dans un tableau de hachage. Cela ressemble à quelque chose comme ça:

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
iJared

Je ne sais pas à propos de Java, mais dans $ .ajax, si vous transmettez la mappe d’objets telle quelle, (c’est-à-dire remove .toStrong()), elle sera accessible comme n’importe quel message. Comme je l'ai dit, je ne sais pas comment cela fonctionne en Java, mais en PHP, il se trouve simplement dans le tableau $_POST comme tout autre article.

0
CWSpear