Ajax传送js数组到SSM项目后台的处理方法

这一生的挚爱 提交于 2019-12-22 06:43:39

前后端数据交互,一般以json的格式进行,而一般前端获取的数组都是js的基本数据类型的,如string、number、array等,如要将这些类型的数据传到后端进行交互,需要进行json格式化,需要用到JSON对象的stringfy()方法进行格式化

JSON.stringify(value[, replacer[, space]])

这个方法前面后两个参数可以不必需,具体用法参考

参数说明:

  • value:

    必需, 要转换的 JavaScript 值(通常为对象或数组)。

  • replacer:

    可选。用于转换结果的函数或数组。

    如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。

    如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。

  • space:

    可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

这里我拿一个自己做过的例子说明下

前一阵子做一个管理系统,里面涉及到异步请求,但是传到后台的数据格式一直不对,在ajax函数里面的data格式写成了这样

data:{"numberArr":JSON.stringify(numberArr)}

这里解释一下,numberArr是一个类似于['123','236','456','678']的字符串数组,这样写不好,后台接收到的是一个“numberArr=['123','236','456','678']”的字符串数组,这样不好处理

然后后来找了一下百度,发现这样写后台接收到的数据会比较好处理

$.ajax({
                    //请求路径
                    url:url+'/deleteUser',
                    //请求类型
                    type:'post',
                    //设置发送到服务器的数据类型
                    contentType:'application/json;charset=utf-8',
                    //设置异步处理请求
                    async:true,
                    //发送到服务器的数据
                    data:JSON.stringify(numberArr),
                    //设置预期服务器响应的数据类型
                    traditional:true,
                    dataType:'json',
                    //设置请求超时时间30秒
                    timeout:30000,

                    //请求成功
                    success:function(data){

                    },
                    //请求失败时执行函数
                    error:function () {
                        $.messager.alert('请求超时!','服务器正忙...请稍后再试!','error');
                    }

                });

我这个是用到SSM来处理后台,所以后台如下

@RequestMapping(value="/deleteUser",produces = "application/json;charset=utf-8")
    @ResponseBody
    public String removeUser(@RequestBody String numberArr){
        System.out.println("=============================================>"+numberArr);
        //转字符串集合
        List<String> numbers = JSON.parseArray(numberArr, String.class);
        numbers.forEach(li->System.out.println("***************************>"+li));
        return "";
    }

这里直接根据传过来的numberArr字符串名称进行接收,而且必须在接收参数前加上@RequestBody,不然接收不到

DEBUG [http-bio-9090-exec-10] - Returning cached instance of singleton bean 'userController'
=============================================>null

正确接收到JSON字符串为类似于["10001","10006","10007"]

这样就可以直接使用com.alibaba.fastjson.JSON包中的方法直接对这个字符串进行转换,我这里直接利用反射,把它转换为String类型的List集合

List<String> numbers = JSON.parseArray(numberArr, String.class);

接下来就可以进行其他的操作了

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!