2011-01-11 7 views
1

ich senden versucht, ein Array als Teil einer Ajax-Anforderung wie folgt an:Wie Sie ein Array als Teil eines (jquery) Ajax-Request

var query = []; 
// in between I add some values to 'query' 
$.ajax({ 
    url: "MyServlet", 
    data: query, 
    dataType: "json", 
    success: function(noOfResults) { 
    alert(noOfResults); 
    } 
    }); 
} 

ich in dem, was ich wieder das sehen wollte Servlets, so habe ich diese Zeile:

System.out.println(request.getParameterMap().toString()); 

Welche {} was auf eine leere Karte zurückgegeben.

Firebug sagt mir, ich bin immer einen 400 bad request Fehler

Wenn ich einen querystring wie attribute=value als ‚Daten‘ sende dann fein alles funktioniert, so dass es in der Lage zu tun hat, nicht um ein Array zu senden gibt. Was muss ich tun, um diese Daten zur weiteren Verarbeitung in das Servlet zu bekommen? Ich möchte es nicht herausziehen und es in einen Abfrage-String in der JS verwandeln, wenn ich es vermeiden kann.

EDIT: Ich habe die .serializeArray() (jQuery) -Funktion vor dem Senden der Daten verwendet. Ich bekomme die 400 nicht, aber nichts nützliches wird durchgeschickt.

+0

Was enthält 'query'? (Zeichenfolgen/Objekte?). Wenn Sie ein Array an 'data' übergeben, geht jQuery davon aus, dass es folgendes Format hat:' [{Name: 'Name', Wert: 'Jim'}, {Name: 'Alter', Wert: '20'}] '. – Matt

+0

Jeder Array-Wert soll ein weiteres Array von Objekten sein - aber im Moment versuche ich nur ein einfaches Beispiel zu bekommen, ähnlich dem, was Sie dort haben. – Ankur

Antwort

4

Sie müssen ein Objekt senden, das Sie zuerst mit JSON.stringify stringifizieren.

wie folgt aus:

var query = []; 
// in between I add some values to 'query' 
$.ajax({ 
    url: "MyServlet", 
    data: JSON.stringify({ nameParameter: query }) 
    dataType: "json", 
    success: function(noOfResults) { 
     alert(noOfResults); 
    } 
    }); 
} 
+1

Beachten Sie, dass nicht alle Browser die 'JSON'-Bibliothek enthalten. Sie sollten die 'json2' Bibliothek einschließen: https://github.com/douglascrockford/JSON-js – Matt

+0

Ich wusste das nicht. Vielen Dank! – peterthegreat

+0

Es schien nicht zu funktionieren. Aber das könnte an anderer Stelle auf einen Fehler zurückzuführen sein. Ich werde versuchen, die hier vorgeschlagene Methode http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery – Ankur

1

Versuchen Sie einfach die Daten als Name/Wert-Paar zu senden (voraussichtlich). Wie

var query = ["data1","data2"]; 
// in between I add some values to 'query' 
$.ajax({ 
    url: "MyServlet", 
    data: {'query' : query}, 
    success: function(noOfResults) { 
    alert(noOfResults); 
    } 
    }); 
} 

Sie sollten die Daten auf Server-Seite bekommen wie dieser

query => Array ([0] => data1 [1] => data2) 

Gemäß der Dokumentation jQuery für data Einstellung von jQuery.Ajax() Methode

Wenn Wert ist ein Array, jQuery serialisiert mehrere Werte mit demselben Schlüssel basierend auf dem Wert der traditionellen Einstellung

+2

Wenn der Parameter 'data' keine Zeichenfolge ist, verwendet jQuery die Methode' jQuery.param', um sie zu serialisieren. Wenn 'jQuery.param' ein Array empfängt, muss es sich um ein Array von Objekten im von .serializeArray() zurückgegebenen Format handeln. ('{{name:" first ", Wert:" Rick "}, {Name:" last ", Wert:" Astley "}, {Name:" Job ", Wert:" Rock Star "}]') ; http://api.jquery.com/jQuery.param – Matt

+0

Danke für die Klarstellung Matt – kaychaks

+0

Danke wird versuchen. – Ankur

Verwandte Themen