【摘要】最近项目用到了大数据的编辑问题,在此做一个简单的总结
【作者】田鋆鹏
在最近的项目中遇到一个问题,这个问题的起因是因为在调用接口传参是传入的数据太大,导致接口调用失败
【重构建议:田甜】
1.我们在重构VUE项目的时候, POST请求并没有发成功,而GET请求却能获取到数据,这个问题解决后,可以列在其中
2. POST和GET的基础原理,甚至是HTTP协议的基本原理,也可以在这里做一些引申
一、出现问题的原因
刚开始以为是因为数据库长度的问题, 因为用到了数据库的扩展字段, 而数据库扩展字段的默认数据类型是 varchar, 默认长度是 一般为 128, 当出现问题的时候将改字段的数据类型改为了 text, 默认长度为最大, 但是在调用接口的时候还是报错了, 说明改字段的长度还是不够, 但是数据库这边已经是不能再修改了, 后边就只能通过后端修改接口来解决问题
二、 解决方法
首先是后端修改结构, 提供一个新的接口, 将参数封装成 json 字符串传到后端
然后是前端在调用接口时要对参数进行调整
因为我们现在的通用的参数传递方式如下:
因为后端接口的结构做了一些调整, 所以需要将参数传递修改为以下格式
具体的参数修改格式方法如下:
1. 先将拿到的数据放到一个对象中
2. 然后将改对象转成json字符串
3. 在调用接口传参时将 header 的contentType修改为appcalition/json;charset=utf-8'
4. 最后在进行 ajax 请求时候再对数据进行一次处理
这样就可以将页面拿到的对象格式的数据转换成请求接口时所需要的 json 格式的数据,这样就可以完成大数据的编辑了
1028更新ing
本次更新主要是在后续的使用过程中又出现了一个比较严重的问题, 问题出现的原因以及解决方案如下:
之前说过大数据编辑的问题, 在调整完毕后又出现了一个问题, 就是在传参数的时候, 如果参数中有 ? 的话, 会出现一些问题
出现原因
因为在处理参数的时候是通过 ? 来分割进行处理的, 所以在传入的参数有 ? 时, 直接就从 ? 处截取了, 到后边就拿不到接口名称了
首先调用接口时传入的参数如下图所示:
然后在调用接口时拿到的参数如下图所示:
我们可以看到这里边有两个 ?, 所以截取的时候就截取成了一个数组中有 3个 元素
正常情况下, 我们在根据 ? 截取后可以在数组的第二个元素中拿到 invoke_method
但是因为这里在传值的时候传入了两个甚至多个 ?, 所以, 我们在数组的第二个元素中就拿不到的这个invoke_method了
所以在控制台中就有了报错信息
解决方案
我这边的解决方案就是在拿到传过来的 url 后, 会先进行一个判断:
如果 url.split('?')[1].split('}]')[1] == undefined 成立的话, 就说明传递过来的字符串中有 两个或者多个 ? , 这时候就手动把所需要的 invoke_method 给拼接到后边
如果 url.split('?')[1].split('}]')[1] == undefined 不成立, 就说明传递过来的字符串就只有一个 ?, 也就是正常的数据, 这时候就不要进行手动拼接, 可以通过 ? 的分割进行拼接
具体的代码如下:
这样在调用接口时不管传递的参数中有几个? , 都是可以正常进行接口调用的
欢迎关注 技术团队的知乎账号 我们凭团队实例运作以下专栏, 必须干货!
互联网创业专栏 (我们小伙伴的创业历程)
与您一起聊技术 (APP、微信公众号、小程序、H5 技术总结)
互联网产品研发管理 (我们公司对产品结构的管理思路)
产品君的案例库(产品小伙伴深刻总结)