在我的项目中,我有以下.ajax()函数,它应该将具有多个值的内容发送到服务器:
$("#btn_enviar").click(function(){
var selecao_usuario=[];
$('#selecao option').each(function(){
selecao_usuario.push($(this).val());
});
$.ajax({
url: "lista_horario.html",
data: { id_usuarios: selecao_usuario, id_evento: $('#id_evento option:selected').val() },
cache: false
}).done(function(data) {
$("#result").show();
$("#result").empty().append( data );
});
});
根据浏览器控制台,这是该函数发送给服务器的参数:
id_evento "1"
id_usuarios[] "9"
id_usuarios[] "4"
id_usuarios[] "7"
id_usuarios[] "8"
因为这最后一个参数,我从服务器收到此错误:
HTTP Status 400 - Required String[] parameter 'id_usuarios' is not present
type Status report
message Required String[] parameter 'id_usuarios' is not present
description The request sent by the client was syntactically incorrect.
Apache Tomcat/7.0.42
上面的函数是从我的spring控制器发送此方法的数据:
@RequestMapping(value="/lista_horario", method=RequestMethod.GET)
@ResponseBody
public String lista_horario(@RequestParam("id_evento") String id_evento, @RequestParam("id_usuarios") String[] usuarios)
{
...
}
答案 0 :(得分:1)
Spring MVC中的Param名称必须与请求中的param名称匹配。在您的情况下,将参数名称从@RequestParam("id_usuarios")
更改为@RequestParam("id_usuarios[]")
。
答案 1 :(得分:0)
由于cache: false
调用中的ajax
选项,最后一个参数已发送。为了防止缓存响应,jQuery添加了参数_
,其值等于当前时间戳(Date.now()
的结果)。这样,请求总是不同的,并且不会被浏览器缓存。如果它导致问题,请通过服务器响应标头禁用缓存,并从您对cache
的调用中删除ajax()
参数。但是,我不确定这就是您收到错误的原因。尝试删除参数,看看它是否有效。