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?
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é.
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]
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.
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));
}
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.