vue框架推荐使用axios来发送ajax请求,
解决方法:
1.qs模块是axios中自带的不需要下载,直接导入 解决问题的核心就是把参数转换成标准的键值对
var qs = require('qs'); axios.post('/foo', qs.stringify({ 'bar': 123 }));
如果参数里面要传数组,查看官方文档发现,只需要在qs的方法中设置它的indices为false即可
qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
2.使用URLSearchParams传递参数
var params = new URLSearchParams(); params.append('param1', 'value1'); params.append('param2', 'value2'); axios.post('/foo', params);
后台可以获取到相应的键值对,但是使用这样的方法有两点坏处,第一个是前端请求每一个字段都append会很麻烦,第二个就是这个对象它不兼容IE和Edge甚至在360浏览器都会挂掉,我曾经尝试过IE11版本都不行,提示这个对象缺失。需要在后端做处理
req = json.loads(request.body) req_userid = req['userid'] req_password = req['password']
最终使用qs简单方便
下面也是我自己
直接访问网上的接口会出现跨域问题,自己写的接口就不会,直接用nginx即可
先解决跨域问题,参考我这篇博客
下面就是具体的一个获取数据的案例
<template></template> <script> export default { created() { this.getList(); }, methods: { getList() { var qs = require('qs'); //传递参数 this.axios.post("/service/getDeviceState",qs.stringify({"version":31,"sign":"c674b4c5e9e4"})) .then((response) => { console.log(response); console.log(response.data); console.log(response.data.code); // console.log(response.code) this.memberList = response.data.data; }) .catch((error) => { console.log(error); }); }, }, }; </script> <style> </style>