问题发生环境
在使用jQuery的ajax函数时候,data传入一个字符串,但是请求的数据后尾出现了一个冒号(:),但是传入object类型调用请求正常。
请求截图:
ajax方法截图:
调试截图:
传入object类型调用截图
问题分析
1、为什么会出现冒号情况
因为使用的是谷歌浏览器(Chrome),在开发者工具的From Data中查看有两个模式:
- view parsed(解析视图),出现冒号
- view source(查看源代码),没有冒号
2、为什么视图解析会将字符解析成键值对
这个还要从jQuery的ajax方法说起,其中影响的是两个参数:
1、data参数,会默认转换成键值对形式,但是字符在形式中不转换。发现在解析视图中还是被解析的,可是查看源代码模式是没有实际添加的冒号。这说明只是显示的情况下看到,但是实际传输确实没有的。
2、contentType 参数,因为默认application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。所以被将被解析视图所解析。
3、为什么请求状态码是415
这是因为我弄错了接口所允许的Content-type,不允许application/x-www-form-urlencoded,应该是application/json,所以这是我自己程序的问题。。。
结论
1、这个冒号的出现是因为contentType的默认是application/x-www-form-urlencoded,所以它将被解析成键值对展示,但是字符串进去是没有改变的,但是展示的时候能看见。
2、要避免这个问题就需要将contentType改为application/json。当然修改了这个参数你的后台接口程序必须支持这个请求类型。
3、对于跨域请求,当contentType改为application/json,将触发浏览器发送一个预检OPTIONS请求到服务器。而这个请求后台接口必须支持。
4、这个是个人对于这个问题的一点个人看法,要是有什么问题请在下方留言,共同进步,十分感谢~