2012-04-18 8 views
18

Ich möchte Daten an ein Java-Servlet zur Verarbeitung senden. Die Daten werden eine variable Länge haben und in Schlüssel/Wert-Paare sein:

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

Die Daten werden nicht auf diese Weise formatiert werden muss, ist es einfach ist, wie ich es jetzt haben.

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 $.ajax() Funktion funktioniert gut, wie ich eine Warnung zu tun bekommen für „Save Complete“. Mein Dilemma ist auf dem Servlet. Wie kann ich die Daten abrufen? Ich versuchte, ein HashMap wie diese zu verwenden ...

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

... aber hm stellt sich heraus, null zu sein, die ich raten bin, bedeutet das .getParameterMap() nicht die Schlüssel/Wert-Paare findet. Wo gehe ich falsch vor oder was fehlt mir?

+1

Haben Sie an, welche Daten einen Blick hatte und wie die Daten an den Server gesendet wird ? Ich glaube nicht, dass "myDataVar.toString()" das ist, was Sie wollen. –

+0

Ich konvertiere die Daten in die Stringvariable myDataVar, damit die Daten beliebig konfiguriert werden können. Ich habe es so, weil ich dasselbe in einem anderen Modul gemacht habe, das gut funktioniert.Allerdings sind die Daten in diesem Modul ein bisschen anders und ich verwende den Standard von JQuery .ajax Typ, der ich denke, ist GET. – iJared

Antwort

31

Sie wollen keine Zeichenkette, Sie möchten wirklich eine JS-Karte von Schlüsselwertpaaren. Z. B. ä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 Schlüsselwertepaare wie das versteht, ist es nicht eine große Zeichenfolge verstehen. Es übergibt es einfach als String.

UPDATE: Code festgelegt.

+0

Solange der Server die Zeichenfolge versteht, ist es in Ordnung ... –

+0

Ich glaube, ich habe das in einem meiner Iterationsversuche versucht. Meine Frage mit diesem Beitrag ist, wie bekomme ich die Daten auf der Serverseite? Die hashmap-Anweisungen oben tun nicht, was ich sie tun muss. – iJared

+0

Selbst nachdem ich lange mit JSON- und jQuery-AJAX-Anfragen gearbeitet habe, habe ich heute den dummen Fehler gemacht, meinen Wert für den Parameter "data" als String anstatt als Objekt zu schreiben. Ich wusste nicht einmal, dass ich es so gemacht habe, bis ich deine Antwort gesehen habe. Geht zu zeigen, dass Sie Probleme verpassen können, die Sie ins Gesicht starren. Danke, dass du mich gerade gerammt hast. –

0

Ich weiß nicht über Java, aber in $ .ajax, wenn Sie die Objektkarte wie übergeben, (d. H. Entfernen .toStrong()) und dann ist es wie jeder Beitrag zugänglich. Wie ich schon sagte, ich weiß nicht, wie das in Java funktioniert, aber in PHP ist es nur im $_POST Array wie jeder andere Post.

0

Vorläufig gehe ich einen anderen Weg als ich vorher sagte. Ich habe die Art, wie ich die Daten am Formatierung:

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

Auf der Serverseite I getParameterNames bin mit() alle Schlüssel in einen Enumerator zu platzieren und Iterieren dann über den Enumerator und Platzierung der Schlüssel und Werte in ein HashMap. Es sieht etwa 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)); 
} 
0

Um den Wert aus dem Servlet von POST Befehl zu erhalten, können Sie den Ansatz folgen, wie auf this post erläuterten unter Verwendung request.getParameter(key) Format, das den von Ihnen gewünschten Wert zurückkehren wird.

2

Einfache Methode zum Senden von Daten mit Java-Skript und Ajex-Aufruf.

Erste Recht Form wie diese

<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-Logik-Ziel auf Form nach id #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]