tae*_*aeC 5 javascript java ajax jsp spring-mvc
我有 2 个下拉菜单:一个用于类别,一个用于子类别。根据我在第一个下拉列表中选择的类别,我希望第二个下拉列表能够动态填充所选类别的子类别。这是我到目前为止所拥有的:
填充第一个下拉列表的控制器:
@RequestMapping(value = "/post_project", method = RequestMethod.GET)
public String postProjectPage(Model model) {
Project project = new Project();
List<Category> categoriesList = categoryService.getAllCategories();
model.addAttribute("projectForm", project);
model.addAttribute("categoriesList", categoriesList);
return "post_project";
}
Run Code Online (Sandbox Code Playgroud)
联合应用程序:
<form:form id="post_project" action="/post_project" method="post" modelAttribute="projectForm">
<form:select class="form-control" id="selectCategory" path="category">
<option value="">-Select-</option>
<form:options items="${categoriesList}" itemValue="id" itemLabel="category_name"/>
</form:select>
Run Code Online (Sandbox Code Playgroud)
对于子类别,我有以下控制器:
@RequestMapping(value = "/post_project", method = RequestMethod.POST)
public @ResponseBody List<Subcategory> getAllSubcategories(@RequestParam(value="categoryId") int categoryId) {
return categoryService.getAllSubcategories(categoryId);
}
Run Code Online (Sandbox Code Playgroud)
联合应用程序:
<form:select class="form-control" id="selectSubcat" path="subcategory">
<option value="-1" label="-Select-"/>
</form:select>
Run Code Online (Sandbox Code Playgroud)
为了填充第二个下拉列表,我使用了 AJAX,但我对此很陌生,我不知道它是否正确。
("#selectCategory").change(function(){
var categoryId = $(this).val();
$.ajax({
type: 'POST',
url: "/post_project",
data: {"categoryId" : categoryId},
success: function(data){
var slctSubcat=$('#selectSubcat'), option="";
slctSubcat.empty();
for(var i=0; i<data.length; i++){
option = option + "<option value='"+data[i].id + "'>"+data[i].subcateogory_name + "</option>";
}
slctSubcat.append(option);
},
error:function(){
alert("error");
}
});
});
Run Code Online (Sandbox Code Playgroud)
当然这是行不通的。当我选择一个类别时,第二个下拉列表中没有显示任何内容。我不知道该怎么办了,我已经尝试了一切。有人可以告诉我我做错了什么吗?
让您以 GET 方式请求:
("#selectCategory").change(function(){
var categoryId = $(this).val();
$.ajax({
type: 'GET',
url: "/categories/" + categoryId,
success: function(data){
var slctSubcat=$('#selectSubcat'), option="";
slctSubcat.empty();
for(var i=0; i<data.length; i++){
option = option + "<option value='"+data[i].id + "'>"+data[i].subcateogory_name + "</option>";
}
slctSubcat.append(option);
},
error:function(){
alert("error");
}
});
});
Run Code Online (Sandbox Code Playgroud)
服务器端控制器方法:
@RequestParam用于获取查询参数。所以,就像..../post_project?categoryId=1
而不是@RequestParam使用@PathVariable如下:
因此,要获取子类别,您@RequestMapping需要.../categories/1
@RequestMapping(value = "/categories/{categoryId}", method = RequestMethod.GET)
public @ResponseBody List<Subcategory> getAllSubcategories(@PathVariable("categoryId") int categoryId) {
return categoryService.getAllSubcategories(categoryId);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11249 次 |
| 最近记录: |