输出 JSON 数据时的 Content-Type

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:缘由是这样的,给前端返回 json 数据,反馈说数据不对(前端是在原代码基础上复制修改的,去掉 jsonp)。看了下后端代码,发现是两次返回 json 的代码不同。但这不是问题的原因,然后再一看 JS 代码,是前端没有进行转换。也正好借此机会,看了下平时没有注意到的点。日常写代码,返回一些简短数据的时候,没有使用框架封装的方法,如下这时候响应头的

导语

缘由是这样的,给前端返回 json 数据,反馈说数据不对(前端是在原代码基础上复制修改的,去掉 jsonp)。看了下后端代码,发现是两次返回 json 的代码不同。但这不是问题的原因,然后再一看 JS 代码,是前端没有进行转换。也正好借此机会,看了下平时没有注意到的点。

分析

日常写代码,返回一些简短数据的时候,没有使用框架封装的方法,如下

exit(json_encode(['message' => 'test']));

这时候响应头的 Content-Typetext/html

如果用框架(ThinkPHP 3.0)的返回方式,

$this->ajaxReturn(['message' => 'test']);

这时候响应头的 Content-Typetext/html; charset=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 ,都可以自动转换为 json 格式,即使 Content-Typetext/html; charset=utf-8 ,这时用 typeof 函数打印返回值,是 object 类型,这也是之前代码没有问题的原因。或者使用 JSON.parse() 转换一下返回值,也是可以的。当然最稳妥的方案还是后端设置 Content-Typeapplication/json

参考资料: Content-Type


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UNIX环境高级编程

UNIX环境高级编程

W.Richard Stevens、Stephen A.Rago / 尤晋元、张亚英、戚正伟 / 人民邮电出版社 / 2006年 / 99.00元

本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的更新版。在本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息......一起来看看 《UNIX环境高级编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具