导语
缘由是这样的,给前端返回 json 数据,反馈说数据不对(前端是在原代码基础上复制修改的,去掉 jsonp)。看了下后端代码,发现是两次返回 json 的代码不同。但这不是问题的原因,然后再一看 JS 代码,是前端没有进行转换。也正好借此机会,看了下平时没有注意到的点。
分析
日常写代码,返回一些简短数据的时候,没有使用框架封装的方法,如下
exit(json_encode(['message' => 'test']));
这时候响应头的 Content-Type 是 text/html
。
如果用框架(ThinkPHP 3.0)的返回方式,
$this->ajaxReturn(['message' => 'test']);
这时候响应头的 Content-Type 是 text/html; charset=utf-8
。看了源码,是有这行代码的
header('Content-Type:text/html; charset=utf-8');
结论
实际上,json 数据是有特定的 Content-Type,是 application/json