今天做ajax访问json文件数据的时候遇到了灵异事件,首先,对于XX.json文件的使用,我是第一次。好吧,也不是灵异事件,只是经验不足造成的错误。
先来个简洁版的案情重现。
页面中的一些数据需要通过接口获取,这里的数据放到了xx.json文件里,当然,通过ajax请求的就是这个xx.json文件了。
ajax请求是用的jQuery的$.ajax()方法,既然是填坑,就针对坑来说,代码如下:
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
url: 'data.json',
type: 'get',
dataType: 'json',
success: function(){
alert('正确的');
},
error: function(){
alert('出错了');
}
});
});
</script>
保证文件路径以及$.ajax方法是写对了的。
那再看data.json文件,文件内容如下:
// 模拟查询输出的数据
{
"id": "1",
"title": "AJAX练习",
"cid":"2",
"content": "ajax练习,json后缀文件和jquery的ajax中dataType的相关问题。"
}
运行弹出‘出错了’!
我请求的是json格式的数据啊,通过Chome的开发人员工具查看Network请求,也是OK的啊,jQuery设置的dataType也是json啊。为毛?
把dataType换成‘text’试试,成功弹出‘正确的’!
Tell me why? why? why? why?
因为,获取的这个‘json’包含了前面的注释掉的字符串!输出的字符串内容就似下面的:
'//xxx\n\r{"key":"value"}'
这就已经不是json了格式了,因为注释信息的字符串,使格式错误,jQuery不能把上面代码转换成json对象。
正确的应该是去掉多余的不相关的信息,包括、尤其是注释信息。
dataType设成json,把data.json文件里的内容改成下面的:
{
"id": "1",
"title": "AJAX练习",
"cid":"2",
"content": "ajax练习,json后缀文件和jquery的ajax中dataType的相关问题。"
}
就对了。
以前都是通过echo json_encode()输出的的,内容干净,这次直接写了个XX.json文件存临时存了数据,还给个注释标注一下,结果就掉坑里了。
请教大神,大神也没发现,自己一步一小测,终于找到这个坑,填上了。
难道程序员真的都看不见注释掉的内容?