美文网首页
输出 JSON 数据时的 Content-Type

输出 JSON 数据时的 Content-Type

作者: haoyq | 来源:发表于2018-06-20 21:04 被阅读0次

    导语

    缘由是这样的,给前端返回 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

    相关文章

      网友评论

          本文标题:输出 JSON 数据时的 Content-Type

          本文链接:https://www.haomeiwen.com/subject/kiyxyftx.html