2010-06-17 2 views
15

Ich möchte einen AJAX-Aufruf als POST machen, es wird zu meinem Servlet gehen. Ich möchte parametrisierte Daten senden, wie folgt aus:Verwenden von jquery, um einen POST zu erstellen, wie wird der Parameter 'data' ordnungsgemäß bereitgestellt?

var mydata = 'param0=some_text&param1=some_more_text'; 

liefere ich dies als die ‚Daten‘ Parameter meiner jquery ajax() -Aufruf. Also sollte dies in den Körper des POST eingefügt werden, oder? (Ich meine, nicht an meine "mysite/save" -URL angehängt?):

scheint es richtig zu funktionieren. In meinem Servlet bin Dumping ich nur alle empfangenen Parameter, und ich sehe sie alle kommen durch schön:

private void printParams(HttpServletRequest req) { 
    Enumeration paramNames = req.getParameterNames(); 
    while (paramNames.hasMoreElements()) { 
     // print each param key/val here. 
    } 
} 

auch sollte ich meine url Datenstring vor der Verwendung manuell codieren, nicht wahr? Wie:

var mydata = 'param0=' + urlencode('hi there!'); 
mydata += '&param1=' + urlencode('blah blah'); 
mydata += '%param2=' + urlencode('we get it'); 

Vielen Dank!

Antwort

29

Eine einfachere Möglichkeit ist die data Eigenschaft als Objekt zur Verfügung zu stellen, wie folgt aus:

$.ajax({ 
    url: 'mysite/save', 
    type: 'POST', 
    data: { param0:'hi there!', param1:'blah blah', param2:'we get it' } 
}); 

Ansonsten ja Sie es kodieren sollte, wie alles, was mit einem & zum Beispiel die Dinge sehr schnell würde vermasseln. Es als Objekt anzubieten, ist meiner Meinung nach ein viel einfacherer Ansatz.

Sie können auch Raum es aus, und Abrufen von Eigenschaften von anderen Orten inline, wie folgt aus:

$.ajax({ 
    url: 'mysite/save', 
    type: 'POST', 
    data: { 
      param0: $('#textbox0').val(), 
      param1: $('#textbox1').val(), 
      param2: $('#textbox2').val() 
     } 
}); 

Edit: Wenn Sie neugierig sind, wie jQuery hat diese Codierung intern, ist es mit $.param() (die Sie können auch direkt verwenden), um das Objekt in eine Zeichenfolge namens here und die Eingeweide here zu codieren.

+0

Sehr cool, danke. – user246114

3

Wenn Sie ein Formular haben, können Sie auch var data = jQuery("#myForm").serialize(); tun, die es in eine Form bringt, die jQuery.ajax verstehen und verwenden kann. Verwenden Sie andernfalls das in der Antwort von Nick beschriebene Objektliteral.

2

kann diese Hilfe Sie

function CallPageSync(url, data) { 
    var response; 
    $.ajax({ 
     async: false, 
     url: url, 
     data: data, 
     timeout: 4000, 
     success: function(result) { 
      response = result; 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText; 
     } 
    }); 
    return response; 
} 

und man kann es nennen wie

response = CallPageSync(checkPageURL, "un=" + username); 
+0

Ich denke, er will * how * wissen, um den 'data' Parameter zu erstellen und nicht' jQuery.ajax' zu verwenden. –

+0

schreiben Sie es einfach so, wie Sie es in URL schreiben: "ID = 10 & Name = aaaaa" –

+0

Definition Einreichung Typ ist besser, ich denke .. Art: 'POST' –

0

Sie brauchen nicht kodieren POST-Variablen URL. Wenn Sie jedoch mit einer Datenbank interagieren, sollten Sie sicherstellen, dass Ihre Variablen durch Injektion geschützt sind.

Was Sie haben, wird funktionieren, aber als Vivin erwähnt, wenn es ein Formular ist, dann ist der beste Weg, es zu tun über .serialize().

Ich benutze dies eine Menge persönlich für alle meine Formulareinreichungen (über .ajax() getan).

Verwandte Themen