JQuery, JSON, Spring MVC – Chargement dynamic des options de sélection

J’ai un formulaire jsp comme celui-ci … Les valeurs dans la deuxième zone de sélection, l’état doit être chargé en fonction de la valeur dans la première zone de sélection (pays) ,. J’utilise AJAX, JSON, Spring MVC pour récupérer les résultats.

index.jsp …..

<form:checkboxes items="${skillsList}" path="skills" itemLabel="description" itemValue="id" delimiter="
" /> <form:checkboxes items="${languagesList}" path="languages" itemLabel="description" itemValue="id" delimiter="
" />

manette….

  @RequestMapping(value="stateslist.html") public @ResponseBody List sectionList(@ModelAtsortingbute("search") SearchForm search, @RequestParam(value="countryId", required=true) Ssortingng countryId, ModelMap modelMap){ return stateService.getStates(countryId); } 

JQuery partie ….

   function getStates(){ $.getJSON( "stateslist.html", {countryId: $('#country').val()}, function(data) { var html = ''; var len = data.length; for(var i=0; i<len; i++){ html += '' + data[i].name + ''; } $('#state').append(html); } ); } $(document).ready(function() { $('#country').change(function() { getStates(); }); });  

Je peux voir que le débogueur soumet la demande ajax au contrôleur Spring et renvoie une liste d’objects State, contenant des champs tels que id, name etc … Le problème est que les options de sélection d’état ne changent pas. semble être que la function(data){....} ne fonctionne pas.peut-on m’aider là où je me trompe …

—Mettre à jour—

J’ai tout supprimé de la fonction de rappel et je viens d’avoir ..

 function(data){alert("something");} 

même cela n’a pas fonctionné … cela signifie que l’appel n’a jamais atteint cette partie …

J’ai le même code où les valeurs de ville (cityId) sont modifiées en fonction de la sélection de pays (countryId). Cela fonctionne parfaitement:

 $("select#countryId").change(function(){ $.getJSON("getCityList.do",{countryCode: $(this).val()}, function(j){ var options = ''; for (var i = 0; i < j.length; i++) { options += ''; } $("select#cityId").html(options); }); }); 

Donc, je pense que vous avez juste besoin d’append le préfixe “select”.

Je mets à jour votre méthode de contrôleur pour éviter une erreur 406 Not Acceptable :

 @RequestMapping(value="stateslist.json") @ResponseStatus(HttpStatus.OK) public @ResponseBody List sectionList(@ModelAtsortingbute("search") SearchForm search, @RequestParam(value="countryId", required=true) Ssortingng countryId, ModelMap modelMap){ return stateService.getStates(countryId); } 

et votre partie JQuery:

  

Ajoutez la dépendance ci-dessous à votre pom.xml :

  com.fasterxml.jackson.core jackson-databind 2.5.0  

Enfin, ajoutez les annotations @ResponseBody dans votre classe de contrôleur.