Ich möchte Daten zur Verarbeitung an ein Java-Servlet senden. Die Daten haben eine variable Länge und liegen in Schlüssel/Wert-Paaren:
{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }
Die Daten müssen nicht auf diese Weise formatiert werden, so habe ich sie jetzt.
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"); });
Die Funktion $.ajax()
funktioniert einwandfrei, da ich eine Warnmeldung für "Save Complete" erhalte. Meine Dilemna liegt auf dem Servlet. Wie rufe ich die Daten ab? Ich habe versucht, eine HashMap wie diese zu verwenden ...
HashMap hm = new HashMap();
hm.putAll(request.getParameterMap());
... aber hm
erweist sich als null, was meiner Meinung nach bedeutet, dass .getParameterMap()
die Schlüssel/Wert-Paare nicht findet. Wohin gehe ich falsch oder was fehlt mir?
Sie möchten keine Zeichenfolge, Sie möchten wirklich eine JS-Zuordnung von Schlüsselwertpaaren. ZB ändern:
data: myDataVar.toString(),
mit:
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 versteht solche Schlüsselwertpaare so, dass sie eine große Zeichenfolge NICHT verstehen. Es wird einfach als String übergeben.
UPDATE: Code behoben.
Einfache Methode zum Senden von Daten mithilfe von Java-Skript und ajex-Aufruf.
Zuerst richtig deine Form so
<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-Logikziel auf der Formular-ID #frm_details nach 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]
Um den Wert des Servlets vom POST
-Befehl zu erhalten, können Sie die Vorgehensweise wie unter diesem Beitrag beschrieben durch Verwendung von request.getParameter(key)
-Format verfolgen, das den gewünschten Wert zurückgibt.
Momentan gehe ich einen anderen Weg als ich vorher angegeben habe. Ich habe die Art, wie ich die Daten formatiere, geändert in:
&A2168=1&A1837=5&A8472=1&A1987=2
Auf der Serverseite verwende ich getParameterNames (), um alle Schlüssel in einem Enumerator zu platzieren und dann den Enumerator zu durchlaufen und die Schlüssel und Werte in eine HashMap zu setzen. Es sieht ungefähr so aus:
Enumeration keys = request.getParameterNames();
HashMap map = new HashMap();
String key = null;
while(keys.hasMoreElements()){
key = keys.nextElement().toString();
map.put(key, request.getParameter(key));
}
Ich weiß nichts über Java, aber in $ .ajax, wenn Sie die Objektzuordnung übergeben (d. H. .toStrong()
entfernen) und dann wie jeder andere Beitrag darauf zugreifen kann. Wie gesagt, ich weiß nicht, wie das in Java funktioniert, aber in PHP ist es wie jeder andere Beitrag nur im $_POST
-Array.