当前位置: 首页 > 后端技术 > PHP

输出JSON数据时Content-Type

时间:2023-03-29 17:18:49 PHP

领先的原因如下。给前端返回json数据时,反馈说数据不正确(前端在原代码的基础上复制修改,去掉jsonp)。看了后端代码,发现两次返回json的代码不一样。但是这不是问题的原因,再看JS代码,是前端没有转换。也正好趁着这个机会,看看平时没注意到的点。分析日常写的代码,在没有使用框架封装方式的情况下返回一些短数据,如下:exit(json_encode(['message'=>'test']));此时响应头的Content-Type为text/html。如果使用框架(ThinkPHP3.0)的return方法,$this->ajaxReturn(['message'=>'test']);此时响应头的Content-Type为text/html;字符集=utf-8。看完源码,有这行代码header('Content-Type:text/html;charset=utf-8');结论其实json数据有一个特定的Content-Type,就是application/json。后来又去看了Laravel。返回json时,Content-Type为application/json。出现这样的问题是因为我不够严谨,用的框架有点老。补充一下,后来看了前端代码。其实用JQuery封装的ajax方法,如果设置dataType为jsonp或json,即使Content-Type为text/html,也可以自动转为json格式;charset=utf-8,然后使用typeof函数打印返回值,是object类型,这也是前面代码没有问题的原因。或者使用JSON.parse()对返回值进行转换,也是可以的。当然,最安全的方案是在后端设置Content-Type为application/json。参考资料:内容类型。