Tengo un problema cuando uso ajax con Spring
Quiero el resultado de la lista de filtros cuando selecciono la regióndesde el cuadro de selección o ingrese el nombre de la tienda en la pantalla, así que mi idea es usar Ajax para resolver esto. Pero Ajax no puede llamar a un controlador específico lo que está en el atributo url de $ .ajax
Debajo están mis archivos:
- JSP:
ID de CSS para se aplica
<form:form modelAttribute="appliedStoreInput" id="appliedStoreSearch">
<form:select path="regionId" cssClass="form-control">
<form:option value="" label="Toàn quốc"></form:option>
<form:options items="${listRegions}" />
</form:select>
<input type="email" class="form-control"placeholder="Tìm kiếm cửa hàng" name="storeNameInp" />
<div class="input-icon">
<i class="fa fa-search"></i>
</div>
</form:form>
Ajax
$(document).on("change","#appliedStoreSearch",function(e){ var input = $("#appliedStoreSearch").serialize(); e.preventDefault(); $.ajax({ url:"/promotions_controller/search_applied_store_ajax", method:"POST", contentType : "application/json;", dataType:"json", data:input, success: function(data){ } }); e.preventDefault(); });
Controlador :
@RequestMapping(value="/search_applied_store_ajax",method=RequestMethod.POST,produces="application/json" ) public @ResponseBody List<AppliedStoreDto> searchAppliedStoreAjax( @ModelAttribute("appliedStoreInput")AppliedStoreInputDto appliedStoreinput){ System.out.println("in ra 1 so thu gi go"); List<AppliedStoreDto> listAppliedStore = null; appliedStoreinput.setCompanyId(7); try { // get list applied store listAppliedStore = promotionLogic.findAllAppliedStore(appliedStoreinput); } catch (Exception e) { logger.error(e.getMessage()); } return listAppliedStore; }
He depurado Javascript y luego recuperé datosdesde el formulario, pero Ajax todavía no puede llamar al controlador Spring (/ promotions_controller / search_applied_store_ajax). No hay nada de lo que se muestra en la consola.
Por favor ayudame, tks todos !!!!
Respuestas
0 para la respuesta № 1Dado que su llamada ajax tiene contentType de "application / json;" Me gustaría agregar consums = "application / json" a su RequestMapping e intercambiar ModelAttribute por RequestBody
0 para la respuesta № 2
La respuesta de Sean es básicamente correcta. Simplemente agregue los detalles exactos. La declaración de la función debería ser similar a la siguiente
@RequestMapping(value="/search_applied_store_ajax",method=RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE}, consumes = {
MediaType.APPLICATION_JSON_VALUE} )
public @ResponseBody List searchAppliedStoreAjax (@RequestBody AppliedStoreInputDto applyStoreinput) {