使用URLSearchParams处理axios发送的数据

使用URLSearchParams处理axios发送的数据

在使用axios这个ajax插件的时候,有时候会遇到一些问题,比如:数据格式不正确

以最简单的例子为基础(这里使用post方法):

 

在上面的例子中我们直接调用axios的post方法,传给后台的参数为json格式,这和jquery的ajax写法相当类似!

但是,axios发送的数据格式和jquery ajax发送的默认数据格式却不相同,不同之处

1axios的数据类型

 

2、jquery ajax的数据类型

 

即使修改了ContentType,数据依然不正确:

 

解决办法:使用URLSearchParams来处理参数,URLSearchParams的兼容性并不高,所以使用的时候还是要注意(可以考虑使用babel来转换)

  具体的操作如下:

 

 

3、URLSearchParams接口用法:处理URL上的参数串的,主要处理形如参数名1=参数值1&参数名2=参数值2(如Name=AA&Age=30)这部分内容,该接口不常用方法有:

       URLSearchParams.append()插入一个指定的键/值对作为新的搜索参数

       URLSearchParams.delete()从搜索参数列表里删除指定的搜索参数及其对应的值。

       URLSearchParams.entries()返回一个iterator可以遍历所有键/值对的对象。

       URLSearchParams.get()获取指定搜索参数的第一个值。

       URLSearchParams.getAll()获取指定搜索参数的所有值,返回是一个数组。

       URLSearchParams.has()返回 Boolean 判断是否存在此搜索参数。

       URLSearchParams.keys()返回iterator 此对象包含了键/值对的所有键名。

       URLSearchParams.set()设置一个搜索参数的新值,假如原来有多个值将删除其他所有的值。

       URLSearchParams.sort()按键名排序。

       URLSearchParams.toString()返回搜索参数组成的字符串,可直接使用在URL上。

       URLSearchParams.values()返回iterator 此对象包含了键/值对的所有值。 

4、示例:

 (1)前端

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <link rel="stylesheet" href="../js/index.css">

    <script src="../js/vue.js" type="text/javascript"></script>

    <script src="../js/elementUI.js" type="text/javascript"></script>

    <script src="../js/axios.js" type="text/javascript"></script>

</head>

<body>

    <div id="app">

      <el-form>

        <el-select v-model="value" placeholder="请选择" multiple>

            <el-option

              v-for="item in options"

              :key="item.value"

              :label="item.label"

              :value="item.value"

              :disabled="item.disabled">

            </el-option>

        </el-select>

        <el-button type="primary" @click="Submit">确定</el-button>

      </el-form>

    </div>

    <script>

        new Vue({

            el:"#app",

            data(){

              return{

               options: [{

                 value: '曹操',

                 company: '魏国',

                 label: '曹操',

                 school: '长安大学'

                }, {

                 value: '孙权',

                 company: '吴国',

                 label: '孙权',

                 school: '南京大学'

                }, {

                 value: '刘备',

                 company: '蜀国',

                 label: '刘备',

                 school: '成都大学'

                }, {

                 value: '司马懿',

                 company: '魏晋',

                 label: '司马懿',

                 school: '复旦大学'

                }, {

                 value: '诸葛亮',

                 company: '蜀国',

                 label: '诸葛亮',

                 school: '武汉大学'

                }],

                value: ''

            }     

        },

        methods:{

                Submit(){

                    let _this = this;

                    console.info(_this.value);

                    var d1 = new URLSearchParams();

                    d1.append('Arr',_this.value)

                    axios({

                       url:"http://localhost:8080/demo/test",

                       method:'post',

                       data:d1

                    })

                }

            }

         

});

    </script>

</body>

</html>

2)后台

@CrossOrigin
@PostMapping("/test")
public String test(HttpServletRequest request){
    String array = request.getParameter("Arr");
    String[] arr = array.split(",");
    String str = "Element Test";
    System.out.println("--------------------------------");
    System.out.println(str);
    for(int i=0;i<arr.length;i++) {
        System.out.println("arr[" +i+"]"+arr[i]);
    }
    return str;
}

原文地址:https://www.cnblogs.com/lone5wolf/p/13826864.html