使用Ajax解析数据遇到的问题
数据格式
我最近在使用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解析数据遇到的问题相关推荐
- php jquery ajax xml,jquery Ajax解析XML数据代码实例
jquery Ajax解析XML数据(同步及异步调用)简单实例 $.ajax({ async: true, // 默认true(异步请求) cache: true, // 默认true,设置为 fal ...
- ajax写入json数据格式化,java ajax解析json数据格式化
java ajax解析json数据格式化 [2021-02-01 23:35:58] 简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...
- 简单爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页
爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页 1.什么是ajax异步数据交换网页 2.用到的工具模块和简单解释 3.网页内容解析 4.代码实现及解释 1.什么是ajax异步数据交换网页 ...
- 前端-Ajax和JSON解析数据
Ajax和JSON解析数据 1,.json 文本端存放数据 // .json 文本端先存放数据 // stars.json [{"champion_name":"洛&qu ...
- api ajax解析json数据库,api ajax解析json数据库
api ajax解析json数据库 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务 ...
- AJAX 传值数据类型问题
AJAX 传值数据类型问题 问题重现: 今天在用AJAX向后台传jobNo值的时候,发现无论怎样后端取到到的值都是null; 附图(前台AJAX,后台获值方法) 解决方法: Step1:一开始我以为是 ...
- ajax post 空格变加号,Ajax Post数据加号变空格详解
我在页面上得到BASE64编码想通过AJAX方式与后台交互,但是后台得到的数据所有的+号都变成了空格,查了一下. 采用Ajax传递数据时,通常会将数据整理为data="var1=abc&am ...
- h5-localStorage实现缓存ajax请求数据
使用背景:要实现每次鼠标hover"能力雷达",则显示能力雷达图(通过ajax请求数据实现雷达图数据显示),所以每次hover都去请求ajax会影响性能,因此这里要用到本地缓存. ...
- python爬虫解析数据包_Python网络爬虫之三种数据解析方式
引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...
最新文章
- Socket程序从windows移植到linux下需要注意的
- python列表索引超出范围 等于啥_python中的“列表索引超出范围”
- 密码学系列之:IDEA
- iBatis 到 MyBatis区别
- 斐波那契数的皮萨诺周期
- linux文件系统选哪种,linux下几种文件系统的测试比较
- arcgis 投影坐标系转地理坐标系_空间坐标与投影系统系列(二):国内常用投影坐标系...
- DataGridView 动态绑定列
- 经典排序算法(八)--选择排序Selection Sort
- Android网卡(Wifi/Lan)带宽测试
- 3D视觉是CV技术的未来!对话奥比中光CEO黄源浩
- 软件测试自学教程——书籍教程篇
- 阿里云手机验证码注册(可以使用阿里云提供的测试模板,不用个人申请)
- 图灵工业机器人说明书_从2020世界人工智能大会,看工业机器人领域领军企业布局|机器人大讲堂...
- Spring Boot 8:Spring Boot整合Redis
- 警惕食源性疾病——食源性病原菌介绍
- GemCraft Labyrinth:超耐玩的在线flash塔防游戏
- 批量分类导出语雀知识库下所有文章
- 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
- UI设计师、平面设计师常用的网站大全,初学者必备,大家都在用!
热门文章
- js中的location的href和pathname,search
- 【网络设计】ConvNeXt:A ConvNet for the 2020s
- dwmac ethernet driver(stmmac)
- 全志A33-串口的使用
- 【Android 修炼手册】常用技术篇 -- Android 自定义 View
- 进入法院黑名单之后,买彩票中了500万还能领奖吗?
- 振臂高呼式的写作:谈肖亦农的《毛乌素绿色传奇》
- 安娜·塞克泽沃斯卡的“小人物”
- 北京某打工子弟学校之二
- wpf 大数据界面_24小时删!WPF 界面开发可视化数据源500行代码分享