zoukankan      html  css  js  c++  java
  • ajax传一个json数据,后端获取不到

    原来的代码是:

     1 $.ajax({
     2     type:'post',
     3     url:owk.fn.url("/tjdpl/report/getCounts.do"),
     4     data:{
     5          "queryin":JSON.stringify(queryParam),
     6          "source":source,
     7          "reportid":reportid
     8     },
     9     contentType:"application/json",
    10     success:function(ress){
    11       window.alert("结果"+ress);
    12     }
    13 });

    结果后端一直获取不到,一直是null

    下面是后端的部分代码:

    1     @ResponseBody
    2     @RequestMapping(value="/preview",method = RequestMethod.GET)
    3     public Map<String,Object> find(ReportQueryBean query) throws UnsupportedEncodingException {
    4     
    5         String queryin=query.getQueryin();//报表的用户查询
    6         String source=query.getSource();//报表的源  
    7         String reportid=query.getReportid();//报表的id

    查了资料之后了解到:(以下的内容引用自https://blog.csdn.net/qq_37960007/article/details/79542727)

    在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象,反之,如果加了contentType:"application/json",那么ajax发送的就必须是字符串。

    contentType参数指定的是浏览器将发送什么样类型的编码,比如   

         text/html : HTML格式

         text/plain :纯文本格式      

         text/xml :  XML格式

         mage/gif :gif图片

         image/jpeg :jpg图片格式 

         image/png:png图片格式

         application/json  :json数据格式

         application/pdf   :pdf格式  

         application/octet-stream : 二进制流数据

    而你不指定contentType则代表为默认的application/x-www-form-urlencoded(表单)类型,这种类型有一个好处,它可以支持很多种情况,并能配合查询字符串(key1=value1&key2=vlaue2)的形式发送到服务器。而且这种默认类型可以很好地配合参数processData(默认为true,可以不用管他),该参数为true的时候,开启自动转化功能,只要是一个合法对象,都能将该对象自动地转化成查询字符串的形式。所以,在contentType默认的情况下(即不写),ajax里的data参数既可以这么传:

            $.ajax({

             url:"http://xxxxxx",

             data: { "username" : "ccc" } ,  //查询字符串的映射形式(即对象),在默认模式下提交时会自动地转化成查询字符串

             .....     

    });

    也可以这么传:

            $.ajax({

             url:"http://xxxxxx",

             data: "username=ccc",   //查询字符串形式

             .....     

    });

    所以看到这里,差不多也能知道为什么指定了contentType : "application/json"后,data就只能是字符串而且必须是json字符串了,首先你指定json格式,那提交格式肯定与json有关,再一个,因为你指定了"application/json"就意味着你放弃了"application/x-www-form-urlencoded"这种默认模式,默认模式虽可以自动地转化对象,不见得"application/json"这种格式就会自动帮你转,而事实证明,它确实不会帮你自动转。

  • 相关阅读:
    java中static的用法
    java策略设计模式
    java模板设计模式
    Spring 学习笔记 8. 尚硅谷_佟刚_Spring_使用外部属性文件
    Spring 学习笔记 7. 尚硅谷_佟刚_Spring_Bean 的作用域
    Spring学习笔记 6. 尚硅谷_佟刚_Spring_Bean 之间的关系
    Spring学习笔记 5. 尚硅谷_佟刚_Spring_自动装配
    Spring 学习笔记 4. 尚硅谷_佟刚_Spring_属性配置细节
    Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
    Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述
  • 原文地址:https://www.cnblogs.com/GritMVP/p/14360392.html
Copyright © 2011-2022 走看看