Ajax POST hívás lista paraméterrel

Ajax POST hívás lista paraméterrel
2015-10-10T15:11:54+02:00
2015-10-11T11:00:43+02:00
2022-10-15T23:15:26+02:00
Hofi Peti
Sziasztok!

A szakdolgozatom egy RESTful alkalmazás (Java, Jersey, Glassfish) szeretne majd lenni, amihez készítek egy JS alapú klienst (JQuery).
A rest alkalmazásnak van egy eljárása, ami egy ID listát fogad paraméterül, és így néz ki (kifejezetten teszteléshez írtam, azért tűnhet elsőre értelmetlennek) :

@PUT @Produces(MediaType.APPLICATION_JSON) @Path("/truck") public List<Truck> getTruck(@FormParam("truck") List<Long> truckId) { List<Truck> result = new ArrayList<>(); TruckDao t = new TruckDao(); for (Long id : truckId) result.add(t.getById(id)); return result; }
Advenced Rest Clienttel csinálok egy tesztet, akkor láthatóan működik (mellékelt kép).

Az általam írt kliensben így nézne ki az eljárás hívása:

function testClick() { var d = { truck: 73 }; console.log("d", d); $.ajax({ type : "PUT", url : url + "db/truck", data: d, success : function(data) { console.log("success", data); }, error : function(a) { glassfishError(a); } }); }
Ami így le is fut, meg is jelenik a 73-as truck, viszont egyszerűen nem jövök rá, hogy hogy tudnék egy ID tömböt megadni. Próbáltam már a

truck: [73,75]
formát, mint ha tömböt adnék meg, de ezt nem szerette (üres volt az eredmény), még akkor sem, ha csak a 73-at írtam a tömbbe.

Hol rontom el? A Java-s eljárással van a baj, vagy JQuery-ben van valami nem triviális módja a lista átadásának?
Előre is köszönöm a segítségetek!
HP

UI.: a címet már nem tudom javítani, de talán lényegtelen is, hogy POST-ról v. PUT-ról van szó.
Mutasd a teljes hozzászólást!
Csatolt állomány
Ha a truck: [73,75]-t adod meg paraméterként, akkor nem a truck nevű változóban kapod meg az értéket, hanem a truck[]-ban:

public List<Truck> getTruck(@FormParam("truck[]") List<Long> truckId) {
az oka az, hogy ha a küldött kulcs-érték párokban ugyanaz a kulcs többször szerepel (pl. truck=73&truck=75), akkor a Java ilyenkor egy tömböt készít - a PHP viszont benyeli az első 73-as értéket, és csak egy sima 75-ös érték lesz a truck változóban. Ahhoz, hogy PHP fele tömböt lehessen küldeni kell rakni a végére egy []-t így jelezve, hogy tömbként kell értelmezni a paramétert és ezért ez lesz elküldve: truck[]=73&truck[]=75 ha a truck: [73,75]-t adod meg paraméterként.

Összegezve: vagy a fenti @FormParam("truck[]") + truck: [73,75]-t használod, vagy saját magad rakod össze stringként az adatot: var d = 'truck=73&truck=75' - és akkor maradhat a @FormParam("truck").
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd