ajax 访问坑
ajax 访问 json 格式不进 success
原因
- 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,不然就会执行 error 。
- 需要特别的注意返回的 JSON 数据是否是严格的 JSON 格式.
- 也应该严重关切当后台返回的是一个 List 数据(List 当中的数据是 Json 格式)时,有没脏数据即不是严格的 JSON 格式。
很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以” 回车键”、”Tab 键” 等 - 原因是 ajax 请求跨域了,解决方法参见上一篇日志,ajax 跨域
- 也有可能是跨域时请求头的问题,比如请求头如下:如果存在 Access-Control-Request-Headers:x-requested-with 这种自定义请求头(一般是 jquery 自己加的,为什么加我就不清楚了),此时在服务器响应头设置”Access-Control-Allow-Headers”:”X-Requested-With” 即可。
1
2
3
4
5
6
7
8
9Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Access-Control-Request-Headers:x-requested-with
Access-Control-Request-Method:GET
Connection:keep-alive
Host:10.108.226.92:9999
Origin:null
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36
这类隐蔽错误的规避措施
就是好的编程习惯:
- 对于在页面填写入库的数据最好强制性的做,去空操作 <利用客户端最好>。
- 特殊的业务需注意特殊字符。
这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。
ajax 跨域方式
跨域方式
jsonp
原理
jsonP 是采用 script 的 src 访问无限制(事实上很多元素的 src 都无访问限制)。比如,当 script 访问的 url 地址为:
<script type=”text/javascript” src=”http://localhost:9999?callback=ttt“> 当服务器接收到请求时,对 query 语句进行解析(上述 query 语句为 callback=ttt),然后将 ttt 作为回调函数名称,以拼接字符串的形式,返回给浏览器,如返回:”” + “ttt (“ + data + “);” 即可。这里给出 nodejs 服务器简单设置: