zoukankan      html  css  js  c++  java
  • AJAX GET POST中的DATA

    原文地址:https://www.jianshu.com/p/63c21bfd1910

    1、AJAX DATA怎么传输的问题

    在contentType默认值: "application/x-www-form-urlencoded"的情况下

    在调用JQUERY的$.ajax函数时候的data属性中,无论是POST还是GET,假如要传输的data是对象obj,我们可以直接写
    data:obj ,也可以 data:$.param(obj)
    原因在于AJAX能够自动判断data的类型,如果是字符串则直接传输,如果是对象则会先调用$.param(obj)再进行传输,源码如下

    //在ajax()方法中,对json类型的数据进行了$.param()处理
    if ( s.data && s.processData && typeof s.data !== "string" ) {
        s.data = jQuery.param( s.data, s.traditional );
    

    下面是W3C上对于AJAX的DATA选项的一个说明

    data
    类型:String
    发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。

    2、GET POST传输方式对于DATA的影响

    在contentType默认值: "application/x-www-form-urlencoded"的情况下

    上面说了data:可以接对象也可以接对象转换后的查询字符串,最终都是传输查询字符串
    对于GET,data查询字符串会直接拼接在URL后面传输到后台
    比如/query?x=bar1&y=bar2,后台接收的时候直接requestParam接收就行了。

    对于POST,data查询字符串不会直接接在URL后面,而是以请求体的方式保存在FORM DATA中进行传输
    比如x=bar1&y=bar2,后台接收的时候仍然是直接@RequestParam接收就行了,但是数据不会显示在URL后面,URL仍然是/query

    如果contentType是 "application/json"的话

    对于GET,data查询字符串仍然是会直接拼接在URL后面传输到后台,没有影响
    对于POST,data仍是以请求体的方式进行传输,但是却是保存在REQUEST PAYLOAD中,这种方式就没办法直接用@RequestParam接收,而是要使用到@RequestBody,这就跟Spring MVC的消息转换机制有关了。
    不仅仅是application/json,对于上传文件等等的contentType,data也都是保存在REQUEST PAYLOAD中。
    如果POST既要上传文件又要上传一些参数的,一种是直接在POST的URL后面拼接参数,然后FormData中只保留数据文件;另一种就是文件和参数都放在FormData也是没有问题的。

    另外上传文件方面还要注意一下AJAX的processData这个选项,要设置为 false

    processData
    类型:Boolean
    默认值: true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。



    作者:晚歌y
    链接:https://www.jianshu.com/p/63c21bfd1910
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    高一下期末考试划水记
    BZOJ 1053
    积性函数与狄利克雷卷积(未完待更)
    Contest Hunter 3101
    POJ2689
    3.17爆零赛
    全概率公式
    矩阵快速幂
    模板练习
    _rqy's Code Style for OI
  • 原文地址:https://www.cnblogs.com/suntp/p/12352952.html
Copyright © 2011-2022 走看看