数据格式

我最近在使用JQuery的$.ajax访问后台的时候,发现竟然无法解析返回的数据,具体的错误记不清了(以后在遇到问题先截个图),可以在浏览器的Console中看到一个错误,但是去看这条请求是有数据返回的,所以刚开始我一直以为是Ajax写的不对,但是这个Ajax也并不是很复杂,实在搞不懂了。

还好这个url可以通过get方式访问,所以我当时直接在浏览器地址栏访问,发现是有数据返回的,但是这个数据的方式很奇怪,因为现在的浏览器都会对JSON数据进行格式化显示,但是这段数据的格式并非JSON的显示样式,反而是XML的方式显示的,这就奇怪了,明明说的都是通过JSON格式交互的,这是什么情况?我看后台代码之后发现他们使用的是@RestController (springMVC 的 org.springframework.web.bind.annotation.RestController)注解,而不是使用的@ResponseBody (使用RestController会告诉SpringMVC使用信息转换器,就可以不使用@ResponseBody注解,而是SpringMVC通过请求头的Accept属性判断,而有些时候这个值会是application/xml,所以会生成XML格式数据),我先没有修改这些后台代码,而是将JQuery中Ajax的dataType属性(dataType属性可以手动设置为json)指定为json,这些数据就可以正常被解析了。

唉,之后写Ajax还是可以加上dataType属性吧。后来,我修改后台代码,设置response的ContentType (使用response.setContentType(type))为application/json;charset=utf-8也是可以被前端正常解析的(哪怕不使用dataType)。

        $.ajax({url:'',type:'get',//设置Accept 预期服务器返回的数据类型dataType:'json',//contentType 可以指定发送给服务器的数据格式contentType:'application/json;charset=utf-8',data:{}});

跨域问题

因为有些数据是需要访问其他的应用才可以获得的,所以就涉及到跨域的问题,处理跨域的问题有两种:

第一种:使用JSONP来处理跨域问题,只需要将dataType设置为jsonp即可(只支持GET方式的请求,因为其底层使用的的是js添加script标签,并设置script的src属性值,所以只能是GET方式)

 $.ajax({url: 'http://localhost:8080/testJsonp',dataType: "jsonp",success: function (data) {console.log(data)}})

这种方式不用修改后台的代码,但是并不一定可以100%解决跨域问题,现象就是:请求响应都很正常(200),而且在浏览器调试工具中也有数据返回,就是拿不到数据,还会报一个数据格式不正确(是多一个还是少一个,号的问题)这个时候需要使用CORS方式。

如果数据量过大,使用GET方式就不太好了,因为URL长度有限制,这个时候也需要使用CORS方式

方法二:CORS,跨域资源共享。修改后台的代码,添加响应头

  response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS");response.setHeader("Access-Control-Allow-Credentials", "true");

这种方式可以解决绝大部分跨域问题,但是就是需要修改后台代码

转载于:https://www.cnblogs.com/lz2017/p/8361030.html

使用Ajax解析数据遇到的问题相关推荐

  1. php jquery ajax xml,jquery Ajax解析XML数据代码实例

    jquery Ajax解析XML数据(同步及异步调用)简单实例 $.ajax({ async: true, // 默认true(异步请求) cache: true, // 默认true,设置为 fal ...

  2. ajax写入json数据格式化,java ajax解析json数据格式化

    java ajax解析json数据格式化 [2021-02-01 23:35:58]  简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...

  3. 简单爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页

    爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页 1.什么是ajax异步数据交换网页 2.用到的工具模块和简单解释 3.网页内容解析 4.代码实现及解释 1.什么是ajax异步数据交换网页 ...

  4. 前端-Ajax和JSON解析数据

    Ajax和JSON解析数据 1,.json 文本端存放数据 // .json 文本端先存放数据 // stars.json [{"champion_name":"洛&qu ...

  5. api ajax解析json数据库,api ajax解析json数据库

    api ajax解析json数据库 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务 ...

  6. AJAX 传值数据类型问题

    AJAX 传值数据类型问题 问题重现: 今天在用AJAX向后台传jobNo值的时候,发现无论怎样后端取到到的值都是null; 附图(前台AJAX,后台获值方法) 解决方法: Step1:一开始我以为是 ...

  7. ajax post 空格变加号,Ajax Post数据加号变空格详解

    我在页面上得到BASE64编码想通过AJAX方式与后台交互,但是后台得到的数据所有的+号都变成了空格,查了一下. 采用Ajax传递数据时,通常会将数据整理为data="var1=abc&am ...

  8. h5-localStorage实现缓存ajax请求数据

    使用背景:要实现每次鼠标hover"能力雷达",则显示能力雷达图(通过ajax请求数据实现雷达图数据显示),所以每次hover都去请求ajax会影响性能,因此这里要用到本地缓存. ...

  9. python爬虫解析数据包_Python网络爬虫之三种数据解析方式

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

最新文章

  1. Socket程序从windows移植到linux下需要注意的
  2. python列表索引超出范围 等于啥_python中的“列表索引超出范围”
  3. 密码学系列之:IDEA
  4. iBatis 到 MyBatis区别
  5. 斐波那契数的皮萨诺周期
  6. linux文件系统选哪种,linux下几种文件系统的测试比较
  7. arcgis 投影坐标系转地理坐标系_空间坐标与投影系统系列(二):国内常用投影坐标系...
  8. DataGridView 动态绑定列
  9. 经典排序算法(八)--选择排序Selection Sort
  10. Android网卡(Wifi/Lan)带宽测试
  11. 3D视觉是CV技术的未来!对话奥比中光CEO黄源浩
  12. 软件测试自学教程——书籍教程篇
  13. 阿里云手机验证码注册(可以使用阿里云提供的测试模板,不用个人申请)
  14. 图灵工业机器人说明书_从2020世界人工智能大会,看工业机器人领域领军企业布局|机器人大讲堂...
  15. Spring Boot 8:Spring Boot整合Redis
  16. 警惕食源性疾病——食源性病原菌介绍
  17. GemCraft Labyrinth:超耐玩的在线flash塔防游戏
  18. 批量分类导出语雀知识库下所有文章
  19. 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
  20. UI设计师、平面设计师常用的网站大全,初学者必备,大家都在用!

热门文章

  1. js中的location的href和pathname,search
  2. 【网络设计】ConvNeXt:A ConvNet for the 2020s
  3. dwmac ethernet driver(stmmac)
  4. 全志A33-串口的使用
  5. 【Android 修炼手册】常用技术篇 -- Android 自定义 View
  6. 进入法院黑名单之后,买彩票中了500万还能领奖吗?
  7. 振臂高呼式的写作:谈肖亦农的《毛乌素绿色传奇》
  8. 安娜·塞克泽沃斯卡的“小人物”
  9. 北京某打工子弟学校之二
  10. wpf 大数据界面_24小时删!WPF 界面开发可视化数据源500行代码分享