摘要:实际上用封装的方法,设置为或者,都可以自动转换为格式,即使是,这时用函数打印返回值,是类型,这也是之前代码没有问题的原因。或者使用转换一下返回值,也是可以的。
导语
缘由是这样的,给前端返回 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 。后来又去看了 Laravel ,返回 json 的时候, Content-Type 就是 application/json 。出现这样的问题,是因为自己不够严谨,而且使用的框架有些老旧。
补充一下,后来又看了前端的代码。实际上用 JQuery 封装的 ajax 方法,dataType 设置为 jsonp 或者 json,都可以自动转换为 json 格式,即使 Content-Type 是 text/html; charset=utf-8,这时用 typeof 函数打印返回值,是 object 类型,这也是之前代码没有问题的原因。或者使用 JSON.parse() 转换一下返回值,也是可以的。当然最稳妥的方案还是后端设置 Content-Type 为 application/json。
参考资料:Content-Type。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/30035.html
摘要:输出为因此当我们发送令牌时,在服务端接收到的是,如果仍用处理,将发生错误。文件上传失败解决删除你的自定义请求头设置参见实践补充篇,文件上传怎么设置 fetch(url, { // GET, POST, PUT, DELETE等 method: GET, }) 关于 GET 参数 发送GET请求时的query参数不能放到对象中(如:{a:1, b:2}) 必须在 url...
摘要:默认情况下,跨域请求发起时候不包含,需要我们主动将的属性设为才行。出现错误时,会返回完整的栈,有利排查。不然如果出现错,响应头不包含这两个跨域标记,就会理所当然地不显示返回内容,也就无法看到错误描述,根本无法排查。 首发我的博客 HTML5中提供了跨域加载数据的方法,让我们得以从JSONP或者Flash中介等各种绕行方案中解脱出来,更加顺畅地与服务器交流。另一方面,因为PHP...
摘要:目标是让与的交互尽可能的更友好。在版本以上已经成为了默认的版本。不同类型的键值对分割符号分别是。这将会协商服务端和你安装的支持的最高协议版本。 博客原文» HTTPie 是一个命令行 HTTP 客户端。目标是让 CLI 与 Web services 的交互尽可能的更友好。它提供了一个简单的 http 命令,可以让我们用简单自然的表述发送任意 HTTP 请求,并且可以输出带代码高亮的结果...
摘要:如何开启来压缩网页文件提高网站速度要知道网站的打开速度取决于浏览器打开下载的网页文件大小。你可以在配置中开启来压缩网页文件。默认情况下,仅压缩文件。服务器上设置站点上设如何在中开启压缩服务让网页速度更快服务器设置压缩是开发里很普遍的做法。nginx如何开启gzip来压缩网页文件提高网站速度?要知道网站的打开速度取决于浏览器打开下载的网页文件大小。如果传输的页面内容文件减少,那你网站的打开速度...
阅读 2335·2021-11-15 11:38
阅读 3544·2021-09-22 15:16
阅读 1187·2021-09-10 11:11
阅读 3156·2021-09-10 10:51
阅读 2921·2019-08-30 15:56
阅读 2774·2019-08-30 15:44
阅读 3185·2019-08-28 18:28
阅读 3525·2019-08-26 13:36