jQuery Ajax中参数data传入string类型,请求数据多一个冒号的分析

问题发生环境

在使用jQuery的ajax函数时候,data传入一个字符串,但是请求的数据后尾出现了一个冒号(:),但是传入object类型调用请求正常。

请求截图:
这里写图片描述
ajax方法截图:
这里写图片描述
调试截图:
这里写图片描述
传入object类型调用截图
这里写图片描述

问题分析

1、为什么会出现冒号情况
因为使用的是谷歌浏览器(Chrome),在开发者工具的From Data中查看有两个模式:

  1. view parsed(解析视图),出现冒号
    这里写图片描述
  2. view source(查看源代码),没有冒号
    这里写图片描述

2、为什么视图解析会将字符解析成键值对
这个还要从jQuery的ajax方法说起,其中影响的是两个参数:

1、data参数,会默认转换成键值对形式,但是字符在形式中不转换。发现在解析视图中还是被解析的,可是查看源代码模式是没有实际添加的冒号。这说明只是显示的情况下看到,但是实际传输确实没有的。

data
类型: PlainObject 或 String 或 Array
发送到服务器的数据。它被转换成一个查询字符串,如果已经是一个字符串的话就不会转换。查询字符串将被追加到GET请求的URL后面。参见 processData 选项说明,以防止这种自动转换。对象必须为”{键:值}”格式。如果这个参数是一个数组,jQuery会按照traditional 参数的值, 将自动转化为一个同名的多值查询字符串(查看下面的说明)。愚人码头注:如 {foo:[“bar1”, “bar2”]} 转换为 ‘&foo=bar1&foo=bar2’。(感谢 @AL0n4k提供的翻译建议。)

2、contentType 参数,因为默认application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。所以被将被解析视图所解析。

contentType (default: ‘application/x-www-form-urlencoded; charset=UTF-8’)
Type: Boolean or String
当将数据发送到服务器时,使用该内容类型。默认值是”application/x-www-form-urlencoded; charset=UTF-8”,适合大多数情况。如果你明确地传递了一个内容类型(Content-Type)给 $.ajax(),那么他总是会发送给服务器(即使没有数据要发送)。从 jQuery 1.6 开始,你可以传递false来告诉jQuery,没有设置任何内容类型头信息。 注意:W3C的XMLHttpRequest的规范规定,数据将总是使用UTF-8字符集传递给服务器;指定其他字符集无法强制浏览器更改编码。 注意:对于跨域请求,内容类型设置为application/x-www-form-urlencoded, multipart/form-data, 或 text/plain以外, 将触发浏览器发送一个预检OPTIONS请求到服务器。

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、这个是个人对于这个问题的一点个人看法,要是有什么问题请在下方留言,共同进步,十分感谢~

参考文献

1、jQuery API 中文文档
2、开源中国-HTTP状态码详解

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页