这是我的ajax电话:
$.ajax({
type: 'GET',
url: contextPath + '/test/location',
data: {'objectValues': object.objectValues },
datatype: 'json',
success: function( data ) {
var obj = jQuery.parseJSON( data );
}
});
它给了我这个网址:
的http://本地主机:8080 /测试/位置objectValues [] = 1234567890&安培; objectValues [] = 0987654321
My Spring方法签名如下所示:
@RequestMapping(value = "/location", method=RequestMethod.GET)
public @ResponseBody String loadLocation(@RequestParam(value="objectValues", required=false) String[] objectValues)
为什么我一直为objectValues的值保持null?
答案 0 :(得分:17)
尝试将RequestParam注释值更改为:
@RequestParam(value="objectValues[]", required=false)
如果这解决了问题,那么这是由于Spring和jQuery之间的参数命名不兼容,其中jQuery想要放置方括号以指示参数是一个数组(我认为PHP也喜欢这个),但是春天不在乎。要查看反向尝试,请将ajax请求的“data”参数设置为字符串:'objectValues = 1234567890& objectValues = 0987654321'
答案 1 :(得分:10)
有多种方法可以执行此操作,具体取决于您认为以错误格式发送或接收数据的组件(或您有权修改的组件)。
如果您认为jQuery发送数据的默认方式是正确的,请相应地修改控制器(请注意,如果同时使用这两种方法,则需要更改方法签名和注释):
@RequestMapping(value = "/location", method=RequestMethod.GET, params="objectValues[]")
public @ResponseBody String loadLocation(@RequestParam(value="objectValues[]", required=false) String[] objectValues) {
...
}
如果您认为Spring功能正常,但是从jQuery发送的数据不正确,请修改jQuery:
$.ajax({
traditional: true,
...
});
有关traditional
设置的详情,请参阅jQuery AJAX settings。
我自己认为修改jQuery发送数据的方式更为清晰;它使我的Controller语法看起来像我想要的那样。
答案 2 :(得分:0)
尝试将ajaxSettings设置为传统。
jQuery.ajaxSettings.traditional = true;